【题目】
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
【输入】
输入是一个个的三元组,分别是,外筐尺寸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@
@@@
【题解】
我一开始是想找到中间位置然后一圈一圈输出出去 结果发现他麻烦了,还是二维数组填坑比较简单。
memcpy()这个可以用来复制 就特别酷 还有strcpy()也能复制strcpy特别适合复制两个数组之间的 有奇效;
#include<iostream>
using namespace std;
int main()
{
char a,b,t;
int n,i,j;
char str[90][90];
int r=0;
while(cin>>n>>a>>b)
{
if(r++)
cout<<endl;
if(n==1)
{
cout<<a<<endl;
continue;
}
if(n%4==1)
t=a,a=b,b=t;
for(i=0;i<n;i++)
str[0][i]=b;
for(i=1;i<=n/2;i++)
{
memcpy(str[i],str[i-1],sizeof(str[i-1]));
for(j=i;j<n-i;j++)
if(i%2==0)
str[i][j]=b;
else
str[i][j]=a;
}
str[0][0]=str[0][n-1]=' ';
for(i=0;i<=n/2;i++)
{
for(j=0;j<n;j++)
{
cout<<str[i][j];
}
cout<<endl;
}
for(i=n/2-1;i>=0;i--)
{
for(j=0;j<n;j++)
{
cout<<str[i][j];
}
cout<<endl;
}
}
return 0;
}