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

如何在不使用数组的情况下用C语言实现并显示Aitken’s array

如何在不使用数组的情况下显示Aitken数组?

Aitken数组是一个数字三角形{aₙ,ₖ, n ≥ 0, 0 ≤ k ≤ n},按行读取,定义规则如下:

  • a₀,₀ = 1
  • aₙ,₀ = aₙ₋₁,ₙ₋₁(每行第一个元素等于上一行的最后一个元素)
  • aₙ,ₖ = aₙ,ₖ₋₁ + aₙ₋₁,ₖ₋₁(每行后续元素等于当前行前一个元素加上上一行对应位置的元素)

其前5行示例如下:

1
1 2
2 3 5
5 7 10 15
15 20 27 37 52

你提供的代码逻辑存在问题,无法正确生成符合规则的Aitken数组。以下是修正后的实现,无需使用数组,仅通过几个变量递推完成:

#include <stdio.h>

int main() {
    int num_rows = 5; // 要输出的行数(从n=0到n=4)
    int prev_last = 1; // 存储上一行的最后一个元素,作为当前行的第一个元素
    printf("%d\n", prev_last);

    // 递推上一行元素的变量:prev_prev是上一行的前一个元素,prev_curr是上一行的当前元素
    int prev_prev = 1;
    int prev_curr = 1;

    // 生成第1行到第num_rows-1行
    for (int n = 1; n < num_rows; n++) {
        int curr = prev_last; // 当前行第一个元素
        printf("%d", curr);

        // 生成当前行剩余的n个元素
        for (int k = 1; k <= n; k++) {
            // 按规则计算当前行下一个元素
            curr = curr + prev_prev;
            printf(" %d", curr);

            // 更新上一行的递推变量,为下一次计算准备
            int temp = prev_curr;
            prev_curr = prev_curr + prev_prev;
            prev_prev = temp;
        }
        printf("\n");
        // 更新上一行的最后一个元素为当前行的最后一个元素
        prev_last = curr;
    }

    return 0;
}

代码说明

  • prev_last:专门存储上一行的最后一个元素,直接作为当前行的第一个元素,满足aₙ,₀ = aₙ₋₁,ₙ₋₁的规则。
  • prev_prev和prev_curr:通过递推维护上一行的元素序列,因为上一行的每个元素等于其前一个元素加上上上行的对应元素,用这两个变量就可以避免存储整个数组。
  • 外层循环:控制总行数,从第1行开始生成(第0行已直接输出)。
  • 内层循环:生成当前行的后续元素,每一步都按规则计算,同时更新上一行的递推变量,确保后续计算能正确获取上一行的对应元素。

运行该代码后,会输出与示例完全一致的Aitken数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:55