题目描述
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计 算机来完成,得看你的了。
输入: 输入是一个个的三元组,分别是,外筐尺寸 n(n 为满足 0<n<80 的奇整数),中心花色字符, 外筐花色字符,后二者都为 ASCII 可见字符;
输出: 输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐 的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
样例输入
11 B A
5 @ W
样例输出
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@
解题思路
#include<cstdio>
using namespace std;
int main()
{
int t;
char x,y;
char a[81][81];
int flag1=0;
while(cin>>t>>x>>y){
if(flag1){
flag1++;
cout<<endl;
}
int flag=1;
int m,n;
m=(t+1)/2;
n=(t+1)/2; //m n 为左右边界
int key;
while(m){
if(flag==1){
key=x;
}else{
key=y;
}
for(int i=m;i<=n;i++)
{//对最里面的圈赋值
a[m][i]=key;
a[n][i]=key;
a[i][n]=key;
a[i][m]=key;
}
//内圈外扩
m--;
n++;
flag*=-1;
}
if(t!=1){
a[1][1]=a[1][t]=a[t][1]=a[t][t]=' ';//对四个角赋值
}
for(int i=1;i<=t;i++)
{
for(int j=1;j<=t;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
}
return 0;
}