如何用for循环实现蝴蝶图案?求代码实现思路与修正方案
蝴蝶图案程序实现方案
我找不到这种蝴蝶状图案的规律,希望有人能指导我编写对应的程序。最开始我尝试编写金字塔图案的代码,但不知道如何实现蝴蝶图案,以下是我的代码:
#include <stdio.h> #include <math.h> int main(void) { int i,j,n; n=5; for(i=0;i<=n;i++){ for(j=0;j<=2*n;j++){ if(abs(j-n)<i) printf(" "); else printf("%d",j); } printf("\n"); } return 0; }
参考的蝴蝶图案为左右、上下对称的数字图案,呈现蝴蝶展翅的形态。
蝴蝶图案的核心规律
- 整体为上下对称+左右对称结构,分为上半部分(含中间行)和下半部分(上半部分的逆序)
- 每行的有效字符区域从中间向两侧扩展(上半部分)或收缩(下半部分),左右两侧数字对称分布
修改后的实现代码
以下是符合蝴蝶图案规律的C代码,以数字蝴蝶为例:
#include <stdio.h> int main(void) { int i, j, n; n = 5; // 控制蝴蝶的大小 // 打印上半部分(包含中间行) for (i = 1; i <= n; i++) { // 左侧递增数字 for (j = 1; j <= i; j++) { printf("%d", j); } // 中间留白区域 for (j = 1; j <= 2 * (n - i); j++) { printf(" "); } // 右侧递减数字 for (j = i; j >= 1; j--) { printf("%d", j); } printf("\n"); } // 打印下半部分(上半部分的逆序) for (i = n - 1; i >= 1; i--) { // 左侧递增数字 for (j = 1; j <= i; j++) { printf("%d", j); } // 中间留白区域 for (j = 1; j <= 2 * (n - i); j++) { printf(" "); } // 右侧递减数字 for (j = i; j >= 1; j--) { printf("%d", j); } printf("\n"); } return 0; }
代码说明
- 上半部分循环:从1到n,每行左侧打印1到i的递增数字,中间用
2*(n-i)个空格保证对称,右侧打印i到1的递减数字 - 下半部分循环:从n-1到1,重复上半部分的逻辑,实现整体上下对称的效果
- 调整
n的值可以改变蝴蝶的大小,n越大,蝴蝶的翅膀越宽
内容的提问来源于stack exchange,提问作者David Su
相关产品推荐
相关产品推荐

