CMNSOFT
首页|算法设计|在线应用
07.数列求和1
作者:孙自超发布时间:2024-12-31 09:07:01

新知识


例1.计算数列前N位的和

写程序求以上数列前N位的和,(N>0且N<1000)。例如:输入2,输出5;输入6,输出28。

(1)题目分析

通过题目要求,解题过程可以分为三个步骤。


步骤1:计算新的插入值

第i位上数字等于前两位数值上的积。我们利用数组存储数列,这样求值就很简单了。

//定义一个数组存储数字 int buf[1000]; buf[0] = 2; buf[1] = 3; ... int v = buf[i-1] * buf[i-2];

步骤2:分割数字

利用取模(%)和整除(/)运算符分割十位和个位。

//v为前两项乘积 if(v>9){ int v1 = v/10; //v1是十位上数字 int v2 = v%10; //v2是个位上数字 }

步骤3:存储数字

//前两位是2和3 buf[0] = 2; buf[1] = 3; //索引值,指向下一个位置 int i = 2; if(v>9){ //两位数存储 ... buf[i++] = v1; buf[i++] = v2; } else{ //一位数存储 buf[i++] = v; }

完整代码

#include<bits/stdc++.h> using namespace std; int main() { int buf[1000],N; buf[0] = 2; buf[1] = 3; int i=2; cin>>N; while(i<N){ int v = buf[i-1] * buf[i-2]; if(v>9){ int v1 = v/10; int v2 = v%10; buf[i++] = v1; buf[i++] = v2; } else{ buf[i++] = v; } } int sum = 0; for(i=0;i<N;i++){ sum+=buf[i]; } cout<<sum; return 0; }

思考:上面程序先算好前N位数字,再进行求和。进行了N*2次循环。能否修改程序,减少循环次数。

桂ICP备11003301号 桂公网安备45040302000027号
Copyright @ 2011-2025 by Sun zi chao 平台运行天数:345天阅读次数:13784次
+  01.基础知识
+  02.数值运算

01.取整与取模

02.寻找因数

03.寻找完全数

04.求最大公约数

05.求最小公倍数

06.斐波那契数列

07.数列求和1

08.数列求和2

+  03.字符串运算
+  04.搜索算法
+  05.排序算法
+  06.分治算法
+  07.回溯算法
+  08.动态规划
+  09.贪心算法
+  10.遗传算法

同步视频