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@ @@@
注意的地方:
1.每两个输出的图形之间要有一行空格
2.注意当n=1时的情形
3.每个角上有一个空格
#include <iostream> #include <cstdio> #define MAX 100005 using namespace std; int main() { char flow[81][81]; char fin,fout,temp; int n,mid,q=0; while(~scanf("%d",&n)) { getchar(); scanf("%c",&fin); getchar(); scanf("%c",&fout); getchar(); if(q) cout<<endl;//解决每两个相邻的输出数据之间有一个空行,学到了^-^ if(n==1) { cout<<fin<<endl; continue; } mid=(n+1)/2; flow[mid][mid]=fin; for(int i=1;i<=(n-1)/2;i++) { if(i%2==0) temp=fin; else temp=fout; for(int j=mid-i,k=mid-i;k<=mid+i;k++)//j行,k列,上 { flow[j][k]=temp; } for(int j=mid-i,k=mid-i;j<=mid+i;j++)//左 flow[j][k]=temp; for(int j=mid+i,k=mid-i;k<=mid+i;k++)//下 flow[j][k]=temp; for(int j=mid-i,k=mid+i;j<=mid+i;j++)//右 flow[j][k]=temp; } flow[1][1]=' ';flow[1][n]=' '; flow[n][1]=' '; flow[n][n]=' '; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<flow[i][j]; cout<<endl; } q=1; } return 0; }