叠筐
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11956 Accepted Submission(s): 3054
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@ @@@
//思路:①先把图案全填成外筐花色字符,再将中心花色字符填在对应位置上
// ②由里向外一圈圈的螺旋着填入中心花色字符
// ③要注意输出时的空格和换行,否则容易PE
#include<iostream>
using namespace std;
int main()
{
int n,i=-1,j,l,a,b;
char p[80][80],x,y;
while(cin>>n>>x>>y)
{
if(i!=-1) cout<<endl; //如果不是第一次输入数据则换行
for(i=0;i<n;i++)
for(j=0;j<n;j++)
p[i][j]=y; //填满外筐花色字符
l=4;
a=b=n/2-2;
if(n==1) {cout<<x<<endl;continue;} //如果n是1则直接输出中心花色字符
for(i=0;i<n/4;i++) //螺旋填入中心花色字符
{
for(j=0;j<l;j++)
{
p[a][b]=x;
b++;
}
for(j=0;j<l;j++)
{
p[a][b]=x;
a++;
}
for(j=0;j<l;j++)
{
p[a][b]=x;
b--;
}
for(j=0;j<l;j++)
{
p[a][b]=x;
a--;
}
a-=2;b-=2;l+=4;
}
p[0][0]=p[0][n-1]=p[n-1][0]=p[n-1][n-1]=' '; //四角都换成空格
p[n/2][n/2]=x; //中心填入中心花色字符
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<p[i][j];
cout<<endl;
}
}
return 0;
}