叠框问题
思路利用二维数组 按层进行处理 每次填充一个正方形
列表格找规律
注意列表格进行分析
分解问题 第一步按层次填充 (打印检测)
第二步磨掉筐的边角 (打印检测)
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
//叠框问题 用二维数组去做
//数量关系列表格
char arr[100][100]={0};
//从中心开始填充 每次填充一个正方形
int n;
char in,out;
int i,j;
//scanf中使用%d %lf忽略空白 %c不忽略空白
while(scanf("%d %c %c",&n,&in,&out)!=EOF){
int layer;//层级
char current=in;
memset(arr,0,10000);
for(layer=0;layer<=n/2;++layer){
//填充每一层的正方形
//左上 i=n/2-layer j=n/2-layer
//右上 i=n/2-layer j=n/2+layer
//左下 i=n/2+layer j=n/2-layer
//右下 i=n/2+layer j=n/2+layer
for(i=n/2-layer,j=n/2-layer;j<=n/2+layer;++j){
arr[i][j]=current;
}//上行
for(i=n/2+layer,j=n/2-layer;j<=n/2+layer;++j){
arr[i][j]=current;
}//下行
for(i=n/2-layer,j=n/2-layer;i<=n/2+layer;++i){
arr[i][j]=current;
}//左列
for(i=n/2-layer,j=n/2+layer;i<=n/2+layer;++i){
arr[i][j]=current;
}//右列
if(in==current){//更换字符
current=out;
} else{
current=in;
}
}
if(n!=1){
arr[0][0]=' ';
arr[0][n-1]=' ';
arr[n-1][0]=' ';
arr[n-1][n-1]=' ';
}
for(i=0;i<n;++i){
printf("%s\n",arr[i]);
}
printf("\n");
}
return 0;
}