如何使用两层循环实现指定的对称字符数字图案输出
如何使用两层循环实现指定的对称字符数字图案输出
嘿,我明白你想要的效果了——这个对称图案的关键是找准每行的缩进、起始字母以及字母和数字的对应规律,而且只用两层循环就能搞定!
先给你直接上能输出正确图案的代码:
#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; }
代码逻辑解释:
- 行控制与偏移量:整个图案共13行,外层循环
i从0到12。offset用来控制每行的缩进程度:前7行(i≤6)offset=i,缩进逐渐增加;后6行(i>6)offset=12-i,缩进逐渐减少,这样就实现了对称的缩进效果。 - 起始字母:每行的起始字母由
offset决定,'A'+offset刚好让上半部分从A递增到G,下半部分从F递减回A,完美匹配你要的对称字母序列。 - 内容输出:内层循环处理每行的7个输出单元:
- 当
j<offset时输出两个空格,实现缩进; - 当
j≥offset时,根据单元索引k的奇偶性输出字母或数字:偶数位输出字母,奇数位输出对应字母的数字(比如A对应2,B对应3,以此类推)。
- 当
为什么你的之前代码会出错?
你之前的下半部分代码里,b的递减逻辑没对应上正确的起始字母,导致下半部分的字母变成了H、I这类超出预期的字符。现在的代码通过offset=12-i直接计算出正确的起始字母,从根源上解决了这个问题,而且全程只用了两层循环,完全符合你的要求。
备注:内容来源于stack exchange,提问作者Jayyyy
相关产品推荐
相关产品推荐

