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); } }

浙公网安备 33010602011771号