c语言叠筐问题

发布于 2022-03-23  653 次阅读


题目描述

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

输入:

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

输出:

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

样例输入:

11 B A
5 @ W

样例输出:

 AAAAAAAAA 
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
 AAAAAAAAA 

 @@@ 
@WWW@
@W@W@
@WWW@
 @@@ 

代码:

#include <stdio.h>
#include <stdlib.h>

char matrix[80][80];
int main(){
    int size;
    char x;
    char y;
    int lt,rb;
    int flag;
    int firstcase = 1;
    while(scanf("%d %c %c",&size,&x,&y) != EOF){
        lt = 0;
        rb = size-1;
        flag = size;
        if(flag/2%2==0) flag = 1;
        else flag = 0;
        if(firstcase == 1){
            firstcase = 0;
        }else{
            printf("\n");
        }
        for(int i = 0;i<=size/2;i++){
            for(int j = lt;j<size-i;j++){
                if(flag%2 == 0){
                    matrix[lt][j] = y;
                    matrix[j][lt] = y;
                    matrix[rb][j] = y;
                    matrix[j][rb] = y;
                }
                else{
                    matrix[lt][j] = x;
                    matrix[j][lt] = x;
                    matrix[rb][j] = x;
                    matrix[j][rb] = x;
                }
            }
            lt++;
            rb--;
            flag++;
        }
        matrix[0][0] = ' ';
        matrix[0][size-1] = ' ';
        matrix[size-1][0] = ' ';
        matrix[size-1][size-1] = ' ';
        for(int i = 0;i<size;i++){
            for(int j = 0;j<size;j++){
                printf("%c",matrix[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

测试:

[img]https://s1.ax1x.com/2023/07/18/pCT2Tk6.png[/img]