解题思路: 我们只需要罗列出每一站的上车人数和每一站的下车人数来求出总数即可看出规律。
我们设上车人数为始发站人数为 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分
44 人评分