经典叠筐问题

题目描述:

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

输入:

输入一个三元组,分别是外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后两者都为ASCII可见字符。

输出:

输出叠在一起的筐图案,中心花色和外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉,叠筐与叠筐之间应有一层间隔。

样例输入:

样例输出:

题目分析:

要从一个中心出发,渐次围绕中心打印字符,分两步走。1.首先要确定中心字符所在位置。2.然后分别确定左上至左下,左上至右上,左下至右下,右上至右下的for循环打印。

两个注意点:

1.花色是渐变的,可以设置一个代表花色的变量,最外层循环每进行一次循环就交错改变一次。2.注意最后将最外层的边角打磨,即将数组[0][0],[0][n-1],[n-1][0],[n-1][n-1]设置为空

变量设置:

int n;//外框的最大长度

char inner,outer;//内和外的花色

char pattern[80][80] = {0};//初始化二维数组

int length=1;//外框的长度

int x,y;//横纵坐标

char curChar=inner;//用来填充的花色

完整代码:

#include <iostream>//叠框

int main() {

int n;//外框的最大长度

char inner,outer;//内和外的花色

while (scanf("%d %c %c",&n,&inner,&outer)!=EOF){

char pattern[80][80] = {0};//初始化二维数组

int length=1;//外框的长度

int x,y;

char curChar=inner;//用来填充的花色

for(length=1,x=n/2,y=n/2;length<=n;length+=2,--x,--y){

for(int i=x,j=y;i<x+length;++i){//左,上到下

//j不变,i从x到x+length-1

pattern[i][j]=curChar;

}

for(int j=y,i=x;j<y+length;++j){//上,左到右

//i不变

pattern[i][j]=curChar;

}

for(int i=x+length-1,j=y;j<y+length;++j){//下,左到右

pattern[i][j]=curChar;

}

for(int j=y+length-1,i=x;i<x+length;++i){//右,上到下

pattern[i][j]=curChar;

}

//更换花色

if(curChar==inner){

curChar=outer;

}

else{

curChar=inner;

}

}

//如果n不等于1,磨掉四个角

if(n!=1){

pattern[0][0]=' ';

pattern[0][n-1]=' ';

pattern[n-1][0]=' ';

pattern[n-1][n-1]=' ';

}

for(int i=0;i<n;i++){

printf("%s\n",pattern[i]);

}

}

return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值