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
平台运行天数:300天
阅读次数:11882次
展开目录
+  01.基础知识

01.算法是什么?

02.编程语言介绍

03.编程基础

04.控制结构-1

05.控制结构-2

06.控制结构-3

07.函数的使用

+  02.数值运算

01.取整与取模

02.寻找因数

03.寻找完全数

04.求最大公约数

05.求最小公倍数

06.斐波那契数列

07.数列求和1

08.数列求和2

+  03.字符串运算

01.字符和字符串

02.字符串查找

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

同步视频