学习笔记

题目: 叠筐

链接:题目链接

Problem Description

需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。


Input

输入是一个个的三元组,分别是,外筐尺寸n(n为满足0


Output

输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。


Sample Input

11 B A

5 @ W


Sample Output

AAAAAAAAA

ABBBBBBBBBA

ABAAAAAAABA

ABABBBBBABA

ABABAAABABA

ABABABABABA

ABABAAABABA

ABABBBBBABA

ABAAAAAAABA

ABBBBBBBBBA

AAAAAAAAA

@@@

@WWW@

@W@W@

@WWW@

@@@

题目本意就是通过你输入的三元组来画出一个筐,与其说是叠框,感觉就是给你ASCII里面的随机两种字符(自己输入的)来画出一个筐来.题目很明确,思路也很明确,但是有很多很多小小的细节让我不能AC好几次,关键在于题目未说明四个角是空格还是结束符,每个例子是不是都有间隔?等等很多细节。

1.输出之间要空行(主要这里栽倒)

2.四个角的情况如何处理

3.N=1的时候

4.含有字符和字母的时候

5.最后的输出不能带有空行!

代码:

#include

#define Max 100

int main(void){

int floor = 0;

int flag = 0;

char a, b;

char sum[Max][Max];

while(scanf("%d %c %c",&floor, &a, &b)==3){

int count = (floor+1)/2;

if(flag==1){

                printf("\n");

            }

        flag=1;

if(floor == 1){

printf("%c\n",a);

continue;

}

else{

for(int j=1;j<=floor;j++){

if(j == 1 || j == floor){

for(int i = 1;i<=floor;i++)

if((a<'A'||a>'z')||(b<'A'||b>'z'))

sum[j][i] = a;

else

sum[j][i] = b;

}

else if(j<=count){

for(int i = 1;i<=floor;i++){

if(i>=j && i<=(floor-j+1)){

if((a<'A'||a>'z')||(b<'A'||b>'z')){

if(j%2 == 0){

sum[j][i] = b;

}

else

sum[j][i] = a;

}

else{

if(j%2 == 0){

sum[j][i] = a;

}

else

sum[j][i] = b;

}

}

else{

sum[j][i] = sum[j-1][i];

}

}

}

else{

for(int i=1;i<=(count-1);i++)

for(int j=1;j<=floor;j++)

sum[count+i][j] = sum[count-i][j];

}

}

for(int i = 1;i<=floor;i++){

for(int j = 1;j<=floor;j++){

if((i == 1&&j==1) || (i==1&&j==floor) || (i == floor&&j==1) || (i==floor&&j==floor))

printf(" ");

else

printf("%c",sum[i][j]);

}

printf("\n");

}

}

}

}

你可能感兴趣的:(学习笔记)