叠筐 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16088 Accepted Submission(s): 4201
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@ @@@
Author qianneng
Source |
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 char s[85][85]; 5 int main() 6 { 7 char a,b; 8 int n; 9 int f=0; 10 while(~scanf("%d %c %c",&n,&a,&b)){ 11 if(f) cout<<endl; 12 if(n==1){//忘记考虑了 13 cout<<a<<endl; 14 continue; 15 } 16 int x=n/2+1; 17 s[x][x]=a; 18 for(int i=1;i<=n/2;i++){ 19 for(int j=x-i;j<=x+i;j++){ 20 if(i%2) s[x-i][j]=s[x+i][j]=s[j][x-i]=s[j][x+i]=b; 21 else s[x-i][j]=s[x+i][j]=s[j][x-i]=s[j][x+i]=a; 22 } 23 } 24 s[1][n]=s[1][1]=s[n][1]=s[n][n]=' '; 25 for(int i=1;i<=n;i++){ 26 for(int j=1;j<=n;j++){ 27 cout<<s[i][j]; 28 } 29 cout<<endl; 30 } 31 f=1; 32 } 33 return 0; 34 }