叠筐
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@
@@@
思路:从内向外叠框,用二维数组存,先找到中心,两次for循环。flag标识字符交错。
#include<iostream>
using namespace std;
int main(){
int n;
char a,b;
char S[80][80];
while(cin>>n>>a>>b){
int mid=n/2;
bool flag=true;
S[mid][mid]=a;
for(int i=1;i<=mid;i++){
if(flag){
for(int j=0;j<2*i+1;j++){
S[mid-i][mid-i+j]=b;
S[mid+i][mid-i+j]=b;
S[mid-i+j][mid-i]=b;
S[mid-i+j][mid+i]=b;
flag=false;
}
}
else{
for(int j=0;j<2*i+1;j++){
S[mid-i][mid-i+j]=a;
S[mid+i][mid-i+j]=a;
S[mid-i+j][mid-i]=a;
S[mid-i+j][mid+i]=a;
flag=true;
}
}
}
S[0][0]=S[0][n-1]=S[n-1][0]=S[n-1][n-1]=' ';
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cout<<S[i][j];
cout<<endl;
}
cout<<endl;
}
return 0;
}