java解洛谷P1011车站问题

车站每站的上车人数,下车人数,剩余人数都组成了斐波那契数列

此代码只计算了剩余人数的情况,所以在输入需要总站数量时会-1取上一站的剩余人数

(最后一站会全部下车,没有上车人数)

每一站的剩余人数都可以用两个斐波那契数列表示

虽然数列的算法一样,但是初始值不同

import java.util.Scanner;

public class D2 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt(); //第一站上车人数
        int n=sc.nextInt(); //总站数
        int m=sc.nextInt(); //最后一站剩余人数
        int x=sc.nextInt(); //求x站人数
        int y=0;
        //特殊情况
        n-=1;
        if (n<3||x<2){
            System.out.print(a);
            return;
        }else if (n==3||x==2){
            System.out.print(2*a);
            return;
        }else if (n==4){
            y=m-(2*a);
        }
        //y的递增趋势斐波那契数列
        int[] fib=new int[20];
        fib[0]=0;
        fib[1]=1;
        fib[2]=2;
        //a的递增趋势斐波那契数列
        int[] fib1=new int[20];
        fib1[0]=0;
        fib1[1]=1;
        fib1[2]=1;
        fib1[3]=2;
        for (int i = 3; i < fib.length; i++) {
            fib[i]=fib[i-1]-fib[i-2]+fib[i-2]-fib[i-3]+fib[i-1];
            fib1[i]=fib1[i-1]-fib1[i-2]+fib1[i-2]-fib1[i-3]+fib1[i-1];
        }

        if (n>4){
            y=(m-((fib1[n-2]+1)*a))/fib[n-3];
        }
        int b=((fib1[x-2]+1)*a)+fib[x-3]*y;
        System.out.println(b);

    }
}

 

posted @ 2021-11-15 13:45  unIlIl  阅读(126)  评论(0)    收藏  举报