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

为何图案代码在CodeNinjas平台换行异常?与其他平台表现不符

图案输出异常问题排查

问题情况

正在学习图案逻辑,编写的图案输出代码在部分在线编译器运行正常,但在CodeNinjas平台和C++中实现相同逻辑时,输出图案与预期不符(目标图案及实际输出见附图)。

问题代码(Java)

public static void numberCrown(int n) {
    // Write your code here.
    int n1=2*(n-1);
    for(int i=1;i<=n;i++){
        for (int j = 1; j <= i; j++) {
            System.out.print(j+"");
        }
        for(int j=1;j<=n1;j++){
            System.out.print(" ");
        }
        for (int j =i; j>=1; j--) {
            System.out.print(j+"");
        }
        System.out.println("");
        n1=n1-2;        
    }
}

异常原因

核心问题出在字符宽度的一致性上:

  • 原代码默认每个数字占1个字符位,当n≥10时,数字会变成两位数(比如i=10时,数字10占2个字符位),导致左右两侧的数字序列长度超出预期,而中间空格数的计算仍基于“每个数字占1位”的逻辑,破坏了每行的总长度一致性,最终造成图案错位。
  • CodeNinjas平台和C++的输出环境对字符长度的渲染更严格,没有自动适配这种长度变化;而其他编译器要么测试的n都是一位数,要么渲染逻辑做了兼容,所以表现正常。

修复方案

确保每个输出单元(数字或空格)的宽度统一,以Java为例,使用格式化输出让每个数字固定占2个字符位,同时调整中间空格数的计算逻辑:

public static void numberCrown(int n) {
    for(int i=1;i<=n;i++){
        // 格式化打印左侧递增数字,每个占2位
        for (int j = 1; j <= i; j++) {
            System.out.printf("%2d", j);
        }
        // 计算中间空格数:保证每行总长度与最后一行一致
        int spaces = 4 * (n - i);
        for(int j=1;j<=spaces;j++){
            System.out.print(" ");
        }
        // 格式化打印右侧递减数字,每个占2位
        for (int j =i; j>=1; j--) {
            System.out.printf("%2d", j);
        }
        System.out.println();
    }
}

如果目标图案要求数字占1位,则仅适用于n≤9的场景,当n≥10时需要重新设计逻辑,避免两位数破坏图案结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:06:29