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

求助:实现特定填充模式的N阶二维整数数组(C语言)

修正N×N数组特定填充模式的C语言代码

需求描述

输入整数N,输出符合特定填充规则的N×N二维整数数组,原代码逻辑错误无法得到正确结果。

期望输入输出示例

  • 输入3时输出:

1 2 6
3 5 7
4 8 9

  • 输入4时输出:

1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16

  • 输入5时输出:

1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25

原错误代码

#include <stdio.h>
#include <stdlib.h>
void SomeFunction(int x);
int main(void)
{
    int N;
    scanf("%d",&N);
    SomeFunction(N);
    return 0;
}
void SomeFunction(int x)
{
   // int array[row][col];
    for(int val=1; val<=x*x; val++)
    {
        for(int i=1; i<=x; i++)
        {
            for(int j=1; j<=x; j++)
            {
                for(int k=2; k<=2*x; k++)
                    { if((i+j)==k) printf("%2d ",val); }
            }
            printf("\n");
        }
    }
}

修正后的代码

#include <stdio.h>
#include <stdlib.h>

void printPattern(int n);

int main(void) {
    int N;
    scanf("%d", &N);
    printPattern(N);
    return 0;
}

void printPattern(int n) {
    int arr[n][n];
    int val = 1;

    // 按i+j的和k遍历,覆盖所有对角线分组
    for (int k = 2; k <= 2 * n; k++) {
        if (k % 2 == 0) {
            // 偶数和:从下往上填充元素
            int start_i = (k - 1) > n ? n : k - 1;
            int end_i = (k - n) < 1 ? 1 : k - n;
            for (int i = start_i; i >= end_i; i--) {
                int j = k - i;
                arr[i-1][j-1] = val++; // 转换为0起始的数组下标
            }
        } else {
            // 奇数和:从上往下填充元素
            int start_i = (k - n) < 1 ? 1 : k - n;
            int end_i = (k - 1) > n ? n : k - 1;
            for (int i = start_i; i <= end_i; i++) {
                int j = k - i;
                arr[i-1][j-1] = val++;
            }
        }
    }

    // 打印最终数组,保持格式对齐
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%2d ", arr[i][j]);
        }
        printf("\n");
    }
}

关键修正说明

  1. 逻辑重构:原代码多层嵌套循环重复打印值,完全不符合填充规则。修正后先创建数组存储结果,再按规则填充,最后统一打印。
  2. 填充规则实现:
    • 按i+j的和k分组,覆盖所有数组元素(k从2到2n)。
    • 偶数k时,从大到小遍历行索引,实现从下往上填充对角线;奇数k时,从小到大遍历行索引,实现从上往下填充,完全匹配示例中的顺序。
  3. 下标处理:C语言数组下标从0开始,循环中使用1起始的i、j时,需转换为0起始的索引(减1)。
  4. 格式对齐:使用%2d确保每个元素占2位宽度,输出格式与示例一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:27:48