叠筐
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12122 Accepted Submission(s): 3122
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@ @@@
题意明确,就是打印图案,最中间的字母是第一个字母,但是该题目很坑,坑一:每组数据之间多有一个换行;坑儿:右上角和右下角必须是空格;
代码是一圈一圈控制的,简单明了!
#include <stdio.h> #include <string.h> char a[80][80]; char c,d,e; int n; void f(int v) { int i,j; char t; if(v%2==1) t=c; else t=d; for(i=v;i<=n+1-v;i++) { a[i][v]=t; a[i][n+1-v]=t; } for(j=v;j<=n+1-v;j++) { a[v][j]=t; a[n+1-v][j]=t; } } int main() { int i,j,t,k=1; while(scanf("%d %c %c",&n,&c,&d)!=EOF) { if(k!=1) printf("\n"); if(n==1) { printf("%c\n",c); continue; } t=n/2+1; if(t%2==0) { e=c;c=d;d=e; } for(i=1;i<=t;i++) f(i); a[1][n]=a[1][1]=a[n][1]=a[n][n]=' '; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%c",a[i][j]); printf("\n"); } k++; } }