A19858. 火车站描述火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定的规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有n(n<20)个车站,始…
填空题
容易
知识点
题目描述
火车站
描述
火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。
从第3站起(包括第3站)上、下车的人数有一定的规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。
现给出的条件是:共有n(n<20)个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。
试问从x站(x<n)开出时车上的人数是多少?若无解输出“No answer.”(所有数据均在long int范围内)
输入格式
输入:a,n,m和x
输出格式
x站开出时车上的人数
输入样例
5 7 32 4输出样例
13输入样例2
1 6 7 3输出样例2
2参考答案
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int fb1(int a,int n,int m)
{
long t;
int i=0;
while(1){
long f1=a;
long f2=i;
for(int j=3;j<n;j++){
t=f1+f2;
f1=f2;
f2=t;
}
if(t+a-i>=m)break;
else i++;
}
if(t+a-i==m)return i;
else return -1;
}
long fb2(int a,int b,int x)
{
if(x==1)return a;
if(x==2)return b;
else
return fb2(a,b,x-1)+fb2(a,b,x-2);
}
int main(int argc, char *argv[])
{
int a,n,m,x,b;
long num;
scanf("%d %d %d %d",&a,&n,&m,&x);
b=fb1(a,n,m);
if(b==-1)printf("No answer.\n");
else{
num=fb2(a,b,x)+a-b;
printf("%ld\n",num);
}
return 0;
}
上一题
下一题