每日一题 叠筐

发布时间:2024年01月21日

模拟

Problem Description

需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

?
Input

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

?
Output

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

?
Sample Input

?
11 B A

5 @ W

?
Sample Output

?
? ?AAAAAAAAA

ABBBBBBBBBA

ABAAAAAAABA

ABABBBBBABA

ABABAAABABA

ABABABABABA

ABABAAABABA

ABABBBBBABA

ABAAAAAAABA

ABBBBBBBBBA

? ?AAAAAAAAA

? ?@@@

@WWW@

@W@W@

@WWW@

? ?@@@
?

#include <iostream>

using namespace std;
//malloc是变长
int main() {
    int n;
    char inner;
    char outer;
    bool flag=true;//第一个结果
    while(scanf("%d %c %c",&n,&inner,&outer)!=EOF)//注意%c会读取空格,得加上空格以使忽略空白字符
    {
        //处理空行显示
        if(flag==true){
            flag=false;
        } else{
            printf("\n");
        }
        char pat[80][80]={0};
        //初始化,边缘框:顶点,边长
        int length=1;//初始
        int cur=inner;//更换图形,inner,outer之间变
        int x,y;//顶点坐标
        for(length=1,x=n/2,y=n/2;length<=n;length=length+2,--x,--y){
            for(int i=x,j=y;i<x+length;i++){
                //j不变,i变
                pat[i][j]=cur;
            }
            for(int i=x,j=y;j<y+length;j++){
                //i不变,j变
                pat[i][j]=cur;
            }
            for(int i=x+length-1,j=y;j<y+length;j++){
                pat[i][j]=cur;
            }
            for(int i=x,j=y+length-1;i<x+length;i++){
                pat[i][j]=cur;
            }
            //更换图形
            if(cur==inner){
                cur=outer;
            }else{
                cur=inner;
            }
        }
        //磨掉四个角
        if(n!=1){
            pat[0][0]=' ';
            pat[0][n-1]=' ';
            pat[n-1][0]=' ';
            pat[n-1][n-1]=' ';
        }
        for(int i=0;i<n;i++){
            printf("%s\n",pat[i]);
        }
    }
    return 0;
}

文章来源:https://blog.csdn.net/m0_69230978/article/details/135723754
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。