http://acm.hdu.edu.cn/showproblem.php?pid=2074
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 <bits/stdc++.h> using namespace std; const int maxn = 1e5+10; char zzt[maxn],wbd[maxn]; char pig[100][100]; int n; int cnt=0; void A(int x)//第 x 圈,最外第一圈 { //左上角是 a[x][x],右下角是 a[n-x+1][n-x+1] char cmz; if(x%2==0) cmz=zzt[0]; else cmz=wbd[0]; for(int i=x; i<=n-x+1; i++) pig[x][i]=cmz; for(int i=x; i<=n-x+1; i++) pig[n-x+1][i]=cmz; for(int i=x; i<=n-x+1; i++) pig[i][x]=cmz; for(int i=x; i<=n-x+1; i++) pig[i][n-x+1]=cmz; } int main() { while(~scanf("%d",&n)) { cnt++; if(cnt!=1) printf(" "); scanf("%s%s",zzt,wbd); if(n==1) { printf("%c ",zzt[0]); continue; } if(((n+1)/2)%2==1) swap(zzt[0],wbd[0]); for(int i=1; i<=(n+1)/2; i++) { A(i); } pig[1][1]=' '; pig[1][n]=' '; pig[n][1]=' '; pig[n][n]=' '; for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { printf("%c",pig[i][j]); } printf(" "); } } return 0; }