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

新知识


例1.插入数值

有一个序列,初始时只有两个数x和y,之后每次操作时,在原序列的任意两个相邻数之间插入这两个数的和,得到新序列。问操作n次之后,得到的序列的所有数之和是多少?

题目分析

以初始序列1,2为例进行说明。

  • 初始数列:1,2
  • 操作1次:1,3,2
  • 操作2次:1,4,3,5,2
  • 操作2次后序列数值和=1+4+3+5+2=15

第1次操作在1和2中间插入1+2=3。

第2次操作在1和3中间插入4,3和2中间插入5。


完整代码

#include<bits/stdc++.h> using namespace std; int main() { int x,y,n; cin>>x>>y>>n; vector<int> s,tmp; s.push_back(x); s.push_back(y); for(int i=0;i<n;i++){ for(int c=0;c<s.size()-1;c++){ tmp.push_back(s[c]); tmp.push_back(s[c]+s[c+1]); } tmp.push_back(s[s.size()-1]); s = tmp; tmp.clear(); } cout<<accumulate(s.begin(),s.end(),0); return 0; }

程序利用两个vector容器s和tmp,每次计算除了把原有数加入,还把相邻两个数的和也加入。最后用accumulate函数计算容器中的和。


更好的办法

上面程序虽然可以求出正确值,但要把每次循环的新值都罗列一便。随着次数越多,新容器中的值就越多。不是很方便。其实我们可以通过观察每次循环后,新数值的数量变化来找出规律,把规律转换成公式来计算。

n值数列x和y的数量
06,71
16,(6,7),72
26,(6,6,7),(6,7),(6,7,7),75
36,(6,6,6,7),(6,6,7),(6,6,7,6,7),(6,7),(6,7,6,7,7),(6,7,7),(6,7,7,7)14
思考:通过表格中的数据,你能归纳出公式了吗?

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

01.算法是什么?

02.编程语言介绍

03.编程基础

04.控制结构-1

05.控制结构-2

06.控制结构-3

07.函数的使用

+  02.数值运算

01.取整与取模

02.寻找因数

03.寻找完全数

04.求最大公约数

05.求最小公倍数

06.斐波那契数列

07.数列求和1

08.数列求和2

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

同步视频