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

如何用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. 上半部分循环:从1到n,每行左侧打印1到i的递增数字,中间用2*(n-i)个空格保证对称,右侧打印i到1的递减数字
  2. 下半部分循环:从n-1到1,重复上半部分的逻辑,实现整体上下对称的效果
  3. 调整n的值可以改变蝴蝶的大小,n越大,蝴蝶的翅膀越宽

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:10:30