火车过站

来源:互联网 发布:club域名怎么用 编辑:程序博客网 时间:2024/06/10 14:54
问题描述
  火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问x站开出时车上的人数是多少?
输入格式
  输入包含一行, 有四个正整数:a(a<=100),n(n<=20),m(m<=10000)和x(x<=19)
输出格式
  输出为一个整数,为x站开出时车上的人数。
/* * 第几站   上车        下车         车上人数 * 1          a1          0             a1 * 2          a2          a2            a1 * 3         a1+a2        a2            a1+a1 * 4         a1+a2+a2     a1+a2         a1+a1+a2 * 5    a1+a2+a1+a2+a2    a1+a2+a2      a1+a1+a2+a1+a2  * .           .            .               . * .           .            .               . * .           .            .               . * 到最后一站的人数就是m ,全部下完 * 思路,只要统计出a1个数和a2的个数就能求出a2,其中a1已经给出,m的数量就是n-1车站的开车的人数 * a2=(m-a1*a1的个数)/a2的个数 *  * */import java.util.*;public class Main3 {public static int a, n, m, x;// 上车的人数public static int[][] arrays;// 车上人数public static int[][] sum;public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);a = sc.nextInt();n = sc.nextInt();m = sc.nextInt();x = sc.nextInt();arrays = new int[20][2];sum = new int[20][2];// 上车人数arrays[0][0] = 1;arrays[0][1] = 0;arrays[1][0] = 0;arrays[1][1] = 1;for (int i = 2; i < n - 1; i++) {arrays[i][0] = arrays[i - 1][0] + arrays[i - 2][0];arrays[i][1] = arrays[i - 1][1] + arrays[i - 2][1];}// 车上人数sum[0][0] = 1;sum[0][1] = 0;sum[1][0] = 1;sum[1][1] = 0;for (int i = 2; i < n - 1; i++) {sum[i][0] = sum[i - 1][0] + arrays[i - 2][0];sum[i][1] = sum[i - 1][1] + arrays[i - 2][1];}// System.out.println(sum[n - 2][0] + " " + sum[n - 2][1]);// 求a2int a2 = (m - sum[n - 2][0] * a);if (a2 != 0) {a2 = a2 / sum[n - 2][1];}// 求第x站的人数System.out.println(sum[x - 1][0] * a + sum[x - 1][1] * a2);}}

0 0
原创粉丝点击