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
ABBBBBBBBBAAAAAAAAAA @@@
@WWW@
@W@W@
@WWW@@@@
代码如下:
#include < iostream>
#include <cstdio>
using namespace std;
char s [100][100] ; //首先定义一个字符数组;
int main()
{char a,b;int n;int f=0;while(~scanf("%d %c %c",&n,&a,&b))//多组数据输入n,a,b;{if(f) cout<< endl;//注意格式的输入,首先,f=0,换行;/*cout<<endl 表示输出换行的意思。endl=end of line换句话说就是让屏幕上输出的内容换行到下一行。 使用前需要使用#include<iostream>的头文件,以及在对应的函数中写入using namespace std或者std::endl;*/if(n==1)//如果只有一个,就输出第一个字符a;{cout<< a<< endl;continue;//然后结束;}int x=n/2+1;//这里的x,为了确定字符数组`中间的`字符是什么;s[x][x]=a;//字符a,即为中间的字符;for(int i=1;i<=n/2;i++)//这里第一个for循环为了控制圈数,从里到外有几圈;{for(int j=x-i;j<=x+i;j++)//第二个for循环控制每一圈;{if(i%2)s[x-i][j]=s[x+i][j]=s[j][x-i]=s[j][x+i]=b;elses[x-i][j]=s[x+i][j]=s[j][x-i]=s[j][x+i]=a;}}s[1][n]=s[1][1]=s[n][1]=s[n][n]=' ';//整个数组的四个角都为空格;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout << s[i][j];//以次输出字符数组;}cout << endl;}f=1;//第二次不用换行;}return 0;
}