**题目:**
题目描述
公共汽车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达 第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)
车上的人数保持为a人。从第3站起(包括第3站)上、下 车的人数有一定的规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的 条件是:共有n个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问从x站开出时车上的人数是多少?
输入
只有一行,四个整数a,n,m和x
输出
x站开出时车上的人数
样例输入
5 7 32 4
样例输出
13
**代码块**
```java
import java.util.Scanner;
public class develop_1179 {
//第numStop站剩余人数 = 上车人数 - 下车人数 + 第n-1站剩余人数
public static int resultNum(int numStop, int aStart, int aLetter) {
if (numStop <= 2) {
return aStart;
}else {
int upNum = upNum(numStop, aStart, aLetter);
int downNum = downNump(numStop, aStart, aLetter);
int resultNum = resultNum(numStop - 1, aStart, aLetter);
int num = upNum - downNum + resultNum;
return num;
}
}
//第numStop站下车人数
public static int downNump(int numStop, int aStart, int aLetter) {
int downNump = upNum(numStop - 1, aStart, aLetter);
return downNump;
}
//第numStop站的上车人数
public static int upNum(int numStop, int aStart, int aLetter) {
if (numStop == 1) {
return aStart;
}else if(numStop == 2) {
return aLetter;
}else {
int num = upNum(numStop - 1, aStart, aLetter) + upNum(numStop - 2, aStart, aLetter);
return num;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int aStart = scan.nextInt(); //始发站上车人数
int nStop = scan.nextInt(); //一共有,站
int mOutNum = scan.nextInt(); //最后一站下车人数
int xIndex = scan.nextInt(); //第"x"站
int resultLetterNum = 0;
//求第二站上车人数resultLetterNum
//第二站上车人数从1开始增加,求各自的(n - 1)站剩余人数,即第n站的下车人数
//当resultNum == mOutNum 时,输出此时的aLetter
//把第二站下车人数带入resultNum()方法求第xIndex站的剩余人数
for (int aLetter = 1; aLetter < 100; aLetter++) {
int resultNum = resultNum(nStop - 1, aStart, aLetter); //第nStop-1站剩余人数
if (resultNum == mOutNum) {
resultLetterNum = aLetter;
break;
}
}
int xIndexNum = resultNum(xIndex, aStart, resultLetterNum);
System.out.println(xIndexNum);
}
}
```
**解题思路**
1.写好上车人数, 下车人数, 剩余人数的方法
2.第二站上车人数,从1开始增加调用剩余人数的方法,当该方法输出的剩余人数等于输入的剩余人数时,即可确定第二站上车人数
3.把第二站上车人数代入剩余人数计算方法,得出结果
0.0分
1 人评分