Description
因为第一个OJ题目,发了个题目的网页截图,自己看了下,好像也不太好阅读,所以就直接不加原题的截图了吧,直接上题目相关信息就好了~🤭
胖老鼠准备M磅的猫粮,准备与守卫仓库的猫交易他最爱吃的JavaBean。仓库有N个房间。第i个房间包含J[I]的JavaBeans,需要F[I]磅的猫粮交换。每个房间可以按比例部分交换,你的任务是计算胖老鼠能获得的最多的JavaBeans。
Input
输入数据有多组,每组数据第一行包括两个正整数M、N,接下来有N行,每行有两个数J[I]和F[I],表示第i个房间JavaBean数量和需要的猫粮数量。当M和N都为-1输入结束。所有数字不会超过1000。
Output
对于每组输入数据,计算胖老鼠能获得的最大JavaBean数量并输出,结果保留三位小数,每个输出占一行。
Sample Input Copy
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
Sample Output Copy
13.333 31.500
//package demo; import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { int m=sc.nextInt(); int n=sc.nextInt(); if(m==-1&&n==-1) break; double [] c=new double [n]; double [] d=new double [n]; double [] e=new double [n]; for(int i=0;i<n;i++) { c[i]=sc.nextDouble(); d[i]=sc.nextDouble(); e[i]=(double)c[i]/d[i]; } for(int i=0;i<n-1;i++) { for(int j=0;j<n-i-1;j++) { if(e[j]>e[j+1]) { double temp=e[j]; e[j]=e[j+1]; e[j+1]=temp; temp=c[j]; c[j]=c[j+1]; c[j+1]=temp; temp=d[j]; d[j]=d[j+1]; d[j+1]=temp; } } }double sum=0; for(int i=n-1;i>=0;i--) { if(m>d[i]){ sum+=c[i]; m-=d[i];} else { sum+=m*e[i]; break; } } System.out.printf(("%.3f"), sum); System.out.println(); }//while b } }运行结果:
我的Eclipse的workplace是选在e://Eclipse , 而安装在d://programe Files//Ecipse里面的, demo包里面的Main文件是在: e://Eclipse//demo//src//demo//Main.java
END