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

新知识


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

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

(1)题目分析

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

  • 计算第N位上的数值
  • 前面两项的乘积会出现两位数,要把两位数分割出十位和个位上的数字。
  • 新数字如何存储到数列。

步骤1:计算N位上的数值

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

//定义一个数组存储数字 int buf[1000]; buf[0] = 2; buf[1] = 3; ... int v = buf[N-1] * buf[N-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(n=0;n<N;n++){ sum+=buf[n]; } cout<<sum; return 0; }

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

桂ICP备11003301号 桂公网安备45040302000027号
Copyright @ 2011-2025 by Sun zi chao
平台运行天数:127天
阅读次数:5461次
展开目录
+  01.基础知识

01.算法是什么?

02.编程语言介绍

03.编程基础

04.控制结构-1

05.控制结构-2

06.控制结构-3

07.函数的使用

+  02.数值运算

01.取整与取模

02.寻找因数

03.寻找完全数

04.求最大公约数

05.求最小公倍数

06.斐波那契数列

07.数列求和

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

同步视频