题解
等差数列
1 条题解
-
0
解题思路
等差数列就是从第二项起,每一项都比前一项大同一个数的数列。题目规定数列从 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