测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题