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

如何使用两层循环实现指定的对称字符数字图案输出

如何使用两层循环实现指定的对称字符数字图案输出

嘿,我明白你想要的效果了——这个对称图案的关键是找准每行的缩进、起始字母以及字母和数字的对应规律,而且只用两层循环就能搞定!

先给你直接上能输出正确图案的代码:

#include <stdio.h>

int main() {
    int i, j;
    // 外层循环控制13行(对应图案的上半7行+下半6行)
    for (i = 0; i < 13; i++) {
        // 计算当前行的缩进偏移量:上半部分offset随i递增,下半部分随i递减
        int offset = (i <= 6) ? i : 12 - i;
        // 每行的起始字母,由偏移量决定:上半从A→G,下半从F→A
        char start_char = 'A' + offset;
        
        // 内层循环控制每行的7个输出单元(每个单元占2个字符)
        for (j = 0; j < 7; j++) {
            if (j < offset) {
                // 缩进部分:输出两个空格
                printf("  ");
            } else {
                int k = j - offset; // 当前内容单元的索引(从0开始)
                if (k % 2 == 0) {
                    // 偶数索引输出字母:每两个单元前进一个字母
                    printf("%c ", start_char + (k / 2));
                } else {
                    // 奇数索引输出数字:字母X对应的数字是X-'A'+2(A→2,B→3...F→7)
                    int num = (start_char + (k - 1)/2) - 'A' + 2;
                    printf("%d ", num);
                }
            }
        }
        printf("\n");
    }
    return 0;
}

代码逻辑解释:

  1. 行控制与偏移量:整个图案共13行,外层循环i从0到12。offset用来控制每行的缩进程度:前7行(i≤6)offset=i,缩进逐渐增加;后6行(i>6)offset=12-i,缩进逐渐减少,这样就实现了对称的缩进效果。
  2. 起始字母:每行的起始字母由offset决定,'A'+offset刚好让上半部分从A递增到G,下半部分从F递减回A,完美匹配你要的对称字母序列。
  3. 内容输出:内层循环处理每行的7个输出单元:
    • 当j<offset时输出两个空格,实现缩进;
    • 当j≥offset时,根据单元索引k的奇偶性输出字母或数字:偶数位输出字母,奇数位输出对应字母的数字(比如A对应2,B对应3,以此类推)。

为什么你的之前代码会出错?

你之前的下半部分代码里,b的递减逻辑没对应上正确的起始字母,导致下半部分的字母变成了H、I这类超出预期的字符。现在的代码通过offset=12-i直接计算出正确的起始字母,从根源上解决了这个问题,而且全程只用了两层循环,完全符合你的要求。

备注:内容来源于stack exchange,提问作者Jayyyy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:29:34