用c++写7、火车站(Noip1998) 【问题描述】 火车从始发站(称为第 1 站)开出,在始发站上车的人数为 a,然后到达第 2 站,在第 2 站有人上、下车,但上、下车的人数相同,因此在第 2 站开出时(即在到达第 3 站之前) 车上的人数保持为 a 人。从第 3 站起(包括第 3 站)上、下车的人数有一定的规律:上车的 人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第 n-1 站),都满足此规律。现给出的条件是:共有 N 个车站,始发站上车的人数为 a,最后一 站下车的人数是 m(全部下车)。试问从 x 站开出时车上的人数是多少?若无解输出“No answer.”(所有数据均在 long 范围内) 【输入格式】a,n,m 和 x 【输出格式】x 站开出时车上的人数 【输入样例】 1 6 7 3 【输出样例】 2
时间: 2024-04-08 12:35:18 浏览: 49
车站问题,C++文件
以下是用C++编写的解决方案:
```cpp
#include <iostream>
using namespace std;
long getPeopleCount(long a, long n, long m, long x) {
if (x == 1) {
return a;
} else if (x == n) {
return m;
} else if (n <= 2 || x < 1 || x > n - 1) {
return -1;
}
long prev = a; // 上一站上车人数
long curr = a; // 当前站上车人数
for (long i = 3; i <= n; i++) {
long temp = curr;
curr = prev + curr; // 当前站上车人数为前两站上车人数之和
prev = temp; // 更新上一站上车人数
if (i == x) {
return curr;
}
}
return -1; // 若无解则输出"No answer."
}
int main() {
long a, n, m, x;
cin >> a >> n >> m >> x;
long peopleCount = getPeopleCount(a, n, m, x);
if (peopleCount == -1) {
cout << "No answer." << endl;
} else {
cout << peopleCount << endl;
}
return 0;
}
```
希望对你有所帮助!
阅读全文