【九度 OJ 07】叠筐

【九度 OJ 07】叠筐

一、题意

二、解答过程

思路:

先定义二维数组,再由内到外一圈一圈填充字符,最后去掉四个角。

Note:

  • 中间左上角字符坐标为: (n/2+1,n/2+1)
  • 次中间左上角坐标为: (n/2+1-1,n/2+1-1)
#include<stdio.h>
int main(){
    
    
    int outputbuf[82][82];//用于预排版的输出缓存
    char a,b;//输入的两个字符
    int n;//叠筐大小
    bool firstcase=true;//是否为第一组数据标志,初始值为true
    while(scanf("%d %c %c",&n,&a,&b)==3){
    
    //scanf()函数返回值是 :成功赋值的数据项数
        if(firstcase==true){
    
    //若是第一组数据
            firstcase=false;//将第一组数据标记成false
        }
        else printf("\n");

        for(int i=1,j=1;i<=n;i+=2,j++){
    
    //从里到外输出每个圈
            int x=n/2+1,y=x;//
            x-=j-1;y-=j-1;//计算每个圈右上角点的坐标
            char c=j%2==1 ?a:b;//计算当前圈需要使用哪个字符
            for(int k=1;k<=i;k++){
    
     //对当前圈的上、下、左、右边赋值
                outputbuf[x+k-1][y]=c;//左边赋值
                outputbuf[x][y+k-1]=c;//上边赋值
                outputbuf[x+i-1][y+k-1]=c;//右边赋值
                outputbuf[x+k-1][y+i-1]=c;//下边赋值
            }
        }
        if(n!=1){
    
    //将四角置位空
            outputbuf[1][1]=' ';
            outputbuf[n][1]=' ';
            outputbuf[1][n]=' ';
            outputbuf[n][n]=' ';
        }
        for(int i=1;i<=n;i++){
    
    
            for(int j=1;j<=n;j++){
    
    
                printf("%c",outputbuf[i][j]);
            }
            printf("\n");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43891901/article/details/122910676
今日推荐