图形排版--叠筐问题

题目描述:把一个个大小差一圈的筐叠上去,使得从上往下看时,边框花色交错。

输入:是一个三元组,(外框尺寸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;

}

王道机试指南 文章被收录于专栏

这个专栏是参考王道机试指南中相关的练习题哦

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务