叠筐
Problem Description
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
Input
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
Output
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
要点 利用二维数组 进行填充再打印 按照层次去填充 一定要注意 scanf(“%c”)输入字符 空格也会被输入进去 所以要scanf(“%d %c %c”,&n,&in,&out)
二维数组使用之前一定要初始化一下 二维数组按照字符串的形式 按行依次输出
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
char in,out;
char par[100][100]={0};
while(scanf("%d %c %c",&n,&in,&out)!=EOF){
//一圈一圈的填充元素 (n+1)/2,(n+1)/2 in
//填充上行
memset(par,0,10000);
char current=in;
int layer;
for(layer=0;layer<=n/2;++layer){//按照层去填充
//上行
for(int i=n/2-layer,j=n/2-layer;j<=n/2+layer;++j){
par[i][j]=current;
}
//下行
for(int i=n/2+layer,j=n/2-layer;j<=n/2+layer;++j){
par[i][j]=current;
}
//左列
for(int j=n/2-layer,i=n/2-layer;i<=n/2+layer;++i){
par[i][j]=current;
}
//右列
for(int j=n/2+layer,i=n/2-layer;i<=n/2+layer;++i){
par[i][j]=current;
}
if(current==in){
current=out;
}else{
current=in;
}
}
if(n!=1){
par[0][0]=' ';
par[0][n-1]=' ';
par[n-1][0]=' ';
par[n-1][n-1]=' ';
}
for(int i=0;i<n;++i){
printf("%s\n",par[i]);
}
printf("\n");
}
return 0;
}