题目1432:叠筐
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:5570
解决:1290
-
题目描述:
-
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
-
输入:
-
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
-
输出:
-
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
-
-
样例输入:
-
11 B A 5 @ W
样例输出: -
AAAAAAAAA ABBBBBBBBBA ABAAAAAAABA ABABBBBBABA ABABAAABABA ABABABABABA ABABAAABABA ABABBBBBABA ABAAAAAAABA ABBBBBBBBBA AAAAAAAAA @@@ @WWW@ @W@W@ @WWW@ @@@
-
思路:
-
1.从里向外叠
-
2.先确定中心坐标,进而确定左上角坐标
-
3.确定本圈的字符,对本圈的左上右下边进行赋值
-
-
代码如下:
-
#include <stdio.h> int main(int argc, char** argv) { int OutPut[82][82]; int n; char a,b;//a为中心花色,b为外层 int i,j; //i为边长,j为圈数 bool firstCase=true; int x,y; int k; while(scanf("%d %c %c",&n,&a,&b)==3) { if(firstCase==true) firstCase==false; else printf("\n"); for(i=1,j=1;i<=n;i+=2,j++) { //从里向外叠 x=n/2+1; y=x;//中心坐标 x=x-(j-1); y=y-(j-1);//x,y指向本圈左上角 char c =(j%2==1?a:b);//本圈应该用什么字符 for(k=1;k<=i;k++) { OutPut[x+k-1][y]=c;//左 OutPut[x][y+k-1]=c;//上 OutPut[x+k-1][y+i-1]=c;//右 OutPut[x+i-1][y+k-1]=c;//下 } } OutPut[1][1] =' '; OutPut[1][n] =' '; OutPut[n][1] =' '; OutPut[n][n] =' ';//四角为空格 for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("%c",OutPut[i][j]); } printf("\n"); } //输出 } return 0; }