You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言字母图案输出调整:如何修改代码实现指定对称缩进图案?

问题描述

现有如下C语言代码:

int main() {
   char A[3][6] = {
      "ABCDE",
      "FGHIJ",
      "KLMNO"
   };

   int i, j, x, y;
   x = 0;
   y = 1;

   for (i=0; i<=2; i++) {
      for (j=0; j<=4; j++) {
         printf("%c ", A[i][j]);
         x++;

         if (x == y) {
            printf("\n");
            y++;
            x=0;
         }
       }
   }
}

运行后输出结果为:

A 
B C 
D E F 
G H I J 
K L M N O

要求仅对上述代码做少量修改,实现如下带缩进的正序及倒序对称字母图案输出:

A
      B C
    D E F
  G H I J
K L M N O

O N M L K
  J I H G
    F E D
      C B
        A

实现方案

我们可以分正序图案和倒序图案两部分调整,核心是控制每行缩进、字符输出顺序,保证对称对齐:

1. 正序图案修改

原代码已经实现了按1、2、3、4、5个字符的节奏输出,只需给每行添加对应缩进即可。缩进规则为:每行空格数 = (5 - 当前行字符数) * 2(比如第一行1个字符,需要8个空格缩进)。

修改后的正序部分代码:

// 正序图案
for (i=0; i<=2; i++) {
   for (j=0; j<=4; j++) {
      // 每行第一个字符前输出对应缩进
      if (x == 0) {
          printf("%*s", (5 - y) * 2, "");
      }
      printf("%c ", A[i][j]);
      x++;

      if (x == y) {
         printf("\n");
         y++;
         x=0;
      }
    }
}

关键修改:用printf("%*s", (5 - y)*2, "")实现动态缩进,%*s是格式化宽度控制,第一个参数指定空格的总宽度,第二个参数为空字符串,以此生成对应数量的空格。

2. 倒序图案修改

倒序需要从最后一个字符开始反向遍历,同时调整缩进逻辑(每行空格数 = (当前行字符数 - 1) * 2,和正序缩进对称)。

完整的最终代码(包含正序+倒序):

#include <stdio.h>

int main() {
   char A[3][6] = {
      "ABCDE",
      "FGHIJ",
      "KLMNO"
   };

   int i, j, x, y;
   x = 0;
   y = 1;

   // 正序图案
   for (i=0; i<=2; i++) {
      for (j=0; j<=4; j++) {
         if (x == 0) {
             printf("%*s", (5 - y) * 2, "");
         }
         printf("%c ", A[i][j]);
         x++;

         if (x == y) {
            printf("\n");
            y++;
            x=0;
         }
       }
   }

   // 空行分隔正序与倒序
   printf("\n");

   // 倒序图案
   y = 5;
   x = 0;
   int idx = 14; // 总共有15个字符,索引范围0-14,从最后一个字符开始遍历

   while (y >= 1) {
      // 输出当前行缩进
      printf("%*s", (y - 1) * 2, "");
      // 输出y个反向字符
      for (int k=0; k<y; k++) {
          // 通过索引计算二维数组中的行和列
          printf("%c ", A[idx/5][idx%5]);
          idx--;
      }
      printf("\n");
      y--;
   }

   return 0;
}

关键修改:

  • 用idx变量从最后一个字符('O',索引14)开始反向遍历,通过idx/5和idx%5计算字符在二维数组中的行、列位置。
  • 倒序缩进规则为(y-1)*2,保证和正序图案对称。
  • 添加空行分隔正序与倒序输出。

内容的提问来源于stack exchange,提问作者Franky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:53:08