解题思路: 我们只需要罗列出每一站的上车人数和每一站的下车人数来求出总数即可看出规律。
我们设上车人数为始发站人数为 a , 第二站上车人数为 x ,由此列出规律.
第n站 上车人数 下车人数 剩下人数
第一站 a 0 a
第二站 x x a
第三站 x+a x 2a
第四站 2x+a x+a 2a+x
第五站 3x+2a 2x+a 3a+2x
第六站 5x+3a 3x+2a 4a+4x
第七站 8x+5a 5x+3a 6a+7x
第八站 13x+8a 8x+5a 9a+12x
由此看出:第一站和第二站人数为a,以后每一站的人数都构成一个相似与斐波那契数列的数列
不妨我们设a的倍数的数列为f(n),x的倍数的数列为F(n),则规律为 a 的倍数为
f(n-1)+f(n-2)+1, x 的倍数为F(n-1)+F(n-2)-1.这样我们就能写出我们的代码了.
参考代码:
#include "iostream" using namespace std; int main() { int a, n, m, b; // a 为始发站人数,n 为车站个数,m为终点站人数,b为第几个车站 int x; // x 为第二站上车和下车的人数 cin >> a >> n >> m >> b; int f[1001] = { 1,1,2 }; // a 的系数 int F[1001] = { 0,0,0 }; // x 的系数 int s1 = 0, s2 = 0; for (int i = 3; i < n-1; i++) { f[i] = f[i - 1] + f[i - 2] - 1; //根据上述规律求出每站 a 的系数 F[i] = F[i - 1] + F[i - 2] + 1; //根据上述规律求出每站 x 的系数 } x = (m - f[n-2] * a) / F[n-2]; //求出第二站的人数 int sum = f[b - 1] * a + F[b - 1] * x; //求出第 b 站开出时车上的人数 cout << sum << endl; return 0; }
0.0分
11 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复