模拟
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@
? ?@@@
?
#include <iostream>
using namespace std;
//malloc是变长
int main() {
int n;
char inner;
char outer;
bool flag=true;//第一个结果
while(scanf("%d %c %c",&n,&inner,&outer)!=EOF)//注意%c会读取空格,得加上空格以使忽略空白字符
{
//处理空行显示
if(flag==true){
flag=false;
} else{
printf("\n");
}
char pat[80][80]={0};
//初始化,边缘框:顶点,边长
int length=1;//初始
int cur=inner;//更换图形,inner,outer之间变
int x,y;//顶点坐标
for(length=1,x=n/2,y=n/2;length<=n;length=length+2,--x,--y){
for(int i=x,j=y;i<x+length;i++){
//j不变,i变
pat[i][j]=cur;
}
for(int i=x,j=y;j<y+length;j++){
//i不变,j变
pat[i][j]=cur;
}
for(int i=x+length-1,j=y;j<y+length;j++){
pat[i][j]=cur;
}
for(int i=x,j=y+length-1;i<x+length;i++){
pat[i][j]=cur;
}
//更换图形
if(cur==inner){
cur=outer;
}else{
cur=inner;
}
}
//磨掉四个角
if(n!=1){
pat[0][0]=' ';
pat[0][n-1]=' ';
pat[n-1][0]=' ';
pat[n-1][n-1]=' ';
}
for(int i=0;i<n;i++){
printf("%s\n",pat[i]);
}
}
return 0;
}