题目: 叠筐
链接:题目链接
Problem Description
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
Input
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
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 <stdio.h>
#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");
}
}
}
}