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

如何打印指定箭头图案?输入10~16间奇数的数字对齐问题

10~16奇数箭头图案的数字对齐问题

需求:输入10~16之间的奇数,打印指定样式箭头图案,目前已能通过循环打印数字,但无法实现数字对齐。

用户提供的C语言代码:

#include <stdio.h>

int n;
int i,j;


int main(){
    printf("(n): ");
    scanf("%d",&n);
    int multiplier = n/2+1;
    printf("    ");
    for(i=1;i<n+1;i++){
        printf(" %d ",i);
    }
    printf("\n");
    for(i=1;i<(n/2)+2;i++){
        printf("%d ",i);
        multiplier = multiplier - i +1;
        for(j=1;j<(i*2);j++){;
            printf(" %2d ",multiplier*i);
            multiplier = multiplier+1;
        }
    printf("\n");
    multiplier = n/2+1;
    }
    for(i=7;i<n+1;i++){
        printf("%d ",i);
        multiplier = 5;
        for(j=0;j<3;j++){
            printf("%d ",multiplier*i);
            multiplier += 1;
        }
        printf("\n");
    }
}

调整方案:统一格式化输出宽度

数字对齐的核心是为每个数字分配固定的输出宽度,避免因数字位数(1位/2位)变化导致错位。可通过以下几点修改:

  1. 统一表头和内容的输出宽度
    表头数字和每行的乘积数字都使用固定宽度格式化输出,比如%3d(占3个字符宽度,右对齐),确保每个数字的占位一致。

  2. 修正行首的对齐逻辑
    第一行表头的前置空格需和后续行的行首数字宽度匹配,行首数字也用固定宽度输出,避免打乱整体对齐。

  3. 修复下半部分循环的硬编码问题
    原代码下半部分用了硬编码的i=7和multiplier=5,仅适配特定n值,需改成基于n的动态计算,同时统一输出格式。

修改后的代码:

#include <stdio.h>

int main(){
    int n, i, j;
    printf("(n): ");
    scanf("%d", &n);
    
    // 打印表头,每个数字占3位宽度
    printf("   "); // 对应行首数字的3位宽度
    for(i=1; i<=n; i++){
        printf("%3d", i);
    }
    printf("\n");
    
    int mid = n/2 + 1;
    // 打印上半部分箭头
    for(i=1; i<=mid; i++){
        // 行首数字占3位宽度
        printf("%3d", i);
        int start = mid - i + 1;
        // 打印i*start到i*(start+2i-2),每个占3位
        for(j=0; j<2*i-1; j++){
            printf("%3d", i*(start + j));
        }
        printf("\n");
    }
    
    // 打印下半部分箭头
    for(i=mid+1; i<=n; i++){
        printf("%3d", i);
        int start = mid - (n - i + 1) + 1;
        int count = 2*(n - i + 1) - 1;
        for(j=0; j<count; j++){
            printf("%3d", i*(start + j));
        }
        printf("\n");
    }
}

关键说明:

  • %3d格式化输出确保每个数字(1位或2位)都占用3个字符宽度,右对齐后自然实现列对齐。
  • 上半部分和下半部分的起始乘数、打印数量都基于n的中间值mid动态计算,适配10~16之间的所有奇数。
  • 表头前置的" "和行首的%3d宽度一致,保证第一列对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:57:33