首页 > 代码库 > 叠筐 HDU - 2074

叠筐 HDU - 2074

找规律的模拟题,细节较多。网上推出的有公式。

除了公式之外,还可以这样看。

这个花框是里外交替的。假设 外 1 层为A的话,接下来外2层就是B,再接下来,外3层为A.....以此类推

层数 t ∈ [ 0,(T+1)/2 )

当 t 为奇数 时 ,最外层为 A ,当 t 为偶数时 最外层为B ,然后层层交替。

处理完之后,再挖去四个角。以空格覆盖之。完毕。

 

注意事项:

(1)由于数据有多组,注意str字符数组的初始化........

(2)当 N==1 时单独输出。

(3)函数调用里面的str[N-1][i]和str[i][N-1],这里必须N-1。(因为下标从0开始)

(4)函数调用 内层的四个for循环结束后,需要T--,N--;

 

下面附上代码

 

技术分享
#include<stdio.h>
#include<string.h>
int N;
char str[100][100];
char x,y;
void check(int ceng,char a,char b) // a 是外层
{
    int T = ceng-1,xx = N;
    char c;
    for(int k = 0; k < ceng; k++)
    {
        c = T % 2 ? a : b;
        for(int i = k; i < N; i++) //
           str[k][i] = c;
        for(int i = k; i < N; i++) //
           str[N-1][i] = c;
        for(int i = k; i < N; i++) //
            str[i][k] = c;
        for(int i = k; i < N; i++) //
            str[i][N-1] = c;
        T--;  // 推算下一层的字符是谁
        N--; // 本层输完了,减一,输它上面的一层
    }
    str[0][0] =  ;
    str[0][xx-1] =  ;
    str[xx-1][0] =  ;
    str[xx-1][xx-1] =  ;
    for(int i = 0; i < xx; i++)
        printf("%s\n",str[i]);
}
int main()
{
    int ok = 0;
    while(scanf(" %d %c %c",&N,&x,&y)!= EOF)
    {
        memset(str,0,sizeof(str));
        if(ok) printf("\n");
        if(N == 1)
        {
            printf("%c\n",x);
            continue;
        }
        int t = (N + 1) / 2;
        check(t,y,x);
        ok = 1;
    }
    return 0;
}
View Code

 

叠筐 HDU - 2074