top1编程
← 返回题目
题解

等差数列

1 条题解

  • 0
    @ 2026-8-4 15:00:52

    解题思路

    等差数列就是从第二项起,每一项都比前一项大同一个数的数列。题目规定数列从 1 开始,每项比前一项大 p,要输出前 k 项。

    我们可以这样想:第 1 项是 1,第 2 项是 1+p,第 3 项是 1+2p……所以第 i 项就是 1+(i-1)×p。用循环从 1 到 k 输出每一项即可。

    更贴近等差数列含义的写法:用一个变量 t 表示当前项,一开始 t=1;每输出一项 t,就执行 t=t+p,让 t 变成下一项。这样就不用每次都乘 (i-1) 了。

    注意输出格式:项与项之间用空格隔开,但第一个数前面不能有空格。代码里用 if(i==1) 判断:第一项直接输出,其余项先输出一个空格再输出该项,这样行末就不会有多余空格,符合题目要求。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int k, p;           // k:输出前 k 项;p:相邻两项的差
        cin >> k >> p;      // 读入 k 和 p
        int t = 1;          // t:当前要输出的项,第一项是 1
        for (int i = 1; i <= k; i++) {   // 循环输出前 k 项
            if (i == 1) {   // 第一项前面不需要空格
                cout << t;
            } else {        // 其他项前面先输出一个空格
                cout << " " << t;
            }
            t = t + p;      // 下一项比当前项大 p
        }
        cout << endl;       // 全部输出完,最后换行
        return 0;
    }
    

    复杂度分析

    循环恰好执行 k 次,每次输出一项并做一次加法,所以时间复杂度是 O(k)。这里 k 表示要输出的项数,k 越大循环次数越多。变量只有 k、p、t、i 四个,空间复杂度是 O(1)。

    • 1