例2.5 叠框

分析:

  1. 输入的整数不超过80
  2. 输入的是奇数 (n=2*i+1)
  3. 图案打印采用二维数组
  4. 中心点为第一个字符 (i+1, j+1)=第一个字符
  5. 从中心点往外一圈字符交替扩散
  6. 图案问题 -> 二维数组 + 数字规律
// 每次填充
void paint(int i, char pattern[80][80], int j, char c) {
    // 1. 上边
    for (int k = i - j; k <= i + j; ++k) {
        pattern[i-j][k] = c;
    }
    // 2. 下边
    for (int k = i - j; k <= i + j; ++k) {
        pattern[i+j][k] = c;
    }
    // 3. 左边
    for (int k = i - j; k <= i + j; ++k) {
        pattern[k][i-j] = c;
    }
    // 4. 右边
    for (int k = i - j; k <= i + j; ++k) {
        pattern[k][i+j] = c;
    }
}

int main(){
    // 图案打印问题 -> 二维数组
    int n;
    char a, b;  // 第一个 和 第二个字符
    while(EOF != scanf("%d %c %c", &n, &a, &b)) {

        char pattern[80][80] = {0};
        printf("%d %c %c\n", n, a, b);
        int i = (n - 1) >> 1;
        // 1. 中心点
        pattern[i][i] = b;

        // 3. 填充内容
        for (int j = 1; j <= i; ++j) { // j 代表第几次涂
            // 中心点i 涂pattern 第j次涂 本次涂哪个字母
            paint(i, pattern, j, j%2 == 1 ? a : b);
        }

        // 2. 四角
        pattern[0][0] = ' ';
        pattern[0][n-1]=' ';
        pattern[n-1][0]=' ';
        pattern[n-1][n-1]=' ';

        // 4. 打印结果
        for (int j = 0; j < n; ++j) {
            printf("%s\n", pattern[j]);
        }
        printf("\n");
    }
}

有账号的同学可以复制粘贴 ac 一下~

全部评论

相关推荐

陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
评论
点赞
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务