图形排版--叠筐问题
题目描述:把一个个大小差一圈的筐叠上去,使得从上往下看时,边框花色交错。
输入:是一个三元组,(外框尺寸n,中心花色字符,外框花色字符),n是>0且<80的奇整数,后二者都是ASCII可见字符。
输出:图案中心花色和外框花色字符从内层起交错相叠,多筐相叠时,最外框的角总是被打磨掉。叠框与叠框之间应有一层间隔。
输入样例1:11 B A
输出样例1:
输入样例2:5 # w
输出样例2:
//叠筐问题
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
int n,layer,i,j,a,b;
char in,out;
char arr[100][100]={0};
char current;//当前要打印的字符
//%d忽略空格和回车,%c不忽略空格和回车
while(scanf("%d %c %c",&n,&in,&out)!=EOF){
memset(arr,0,10000);
current=in;
for(layer=0;layer<=n/2;++layer){ //一层一层 ,从中心往四周填充,layer:0~n/2
a=n/2-layer;//左上(n/2-i,n/2-i)
b=n/2+layer;//右上(n/2-i,n/2+i)
//左下(n/2+i,n/2-i) ,右下(n/2+i,n/2+i)
for(i=a,j=a;j<=b;++j){ //填充上边
arr[i][j]=current;
}
for(i=b,j=a;j<=b;++j){ //填充下边
arr[i][j]=current;
}
for(i=a,j=a;i<=b;++i){ //填充左边
arr[i][j]=current;
}
for(i=a,j=b;i<=b;++i){ //填充右边
arr[i][j]=current;
}
if(current==in){
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]);//按行输出二维数组,所以是%s
}
}
return 0;
}
这个专栏是参考王道机试指南中相关的练习题哦