ACM杭电 1009 FatMouse Trade ,不知道什么原因老是wrong answer 啊,求各位大神指点啊。

importjava.text.DecimalFormat;importjava.util.Scanner;publicclassFatMouse_Trade{publi... import java.text.DecimalFormat;
import java.util.Scanner;
public class FatMouse_Trade {
public static void main(String[] args) {
int m,n;
//m为FatMouse拥有的猫食,n为仓库的房间数;
double result;
Scanner scan=new Scanner(System.in);
m=scan.nextInt();
n=scan.nextInt();
while(m!=-1 && n!=-1){
result=0.0;
int[] j=new int[n];//j[i]为第j个房间所含有的java bean
int[] f=new int[n];//f[i]为该房间所需要的猫食数量cat food
double[] jDevidef=new double[n];//第i个房间中一份猫食所能换bean的个数
for(int i=0;i<n;i++){
j[i]=scan.nextInt();
f[i]=scan.nextInt();
jDevidef[i]=(double)j[i]/f[i];
}

//对jDevidef数组进行从大到小排序
int max,jtemp,ftemp;
double dtemp;
for(int index=0;index<n-1;index++){
max=index;
for(int s=index;s<n;s++){
if(jDevidef[s]>jDevidef[max])
max=s;
}
dtemp=jDevidef[max];
jDevidef[max]=jDevidef[index];
jDevidef[index]=dtemp;
jtemp=j[max];
j[max]=j[index];
j[index]=jtemp;
ftemp=f[max];
f[max]=f[index];
f[index]=ftemp;

}
if(m!=0){
for(int i=0;i<n;i++){
if(m<f[i]){
double a=(double)m/f[i];
result+=j[i]*a;
break;
}
else{
m=m-f[i];
result+=(double)j[i];
}
}
}

else{
for(int i=0;i<n;i++){
if(f[i]==0)
result+=(double)j[i];

}
}

DecimalFormat fmt=new DecimalFormat("0.000");
System.out.println(fmt.format(result));
m=scan.nextInt(); n=scan.nextInt();
}
}
}
展开
 我来答
dezhonger
2013-05-26 · TA获得超过153个赞
知道答主
回答量:85
采纳率:0%
帮助的人:56.6万
展开全部
贪心思想。下面是code已经ac了。
#include <stdio.h>
#include <stdlib.h>

int main()
{
int m,n,i,a[1010][3],index,k,temp[3][3];
double w,h;
while(scanf("%d%d",&m,&n)!=EOF){
if(m==-1&&n==-1) break;
h=w=0;
for(i=1;i<=n;i++){
scanf("%d%d",&a[i][1],&a[i][2]);
}
for(k=1;k<n;k++){
index=k;
for(i=k+1;i<=n;i++)
if((1.0*a[i][1]/a[i][2])>(1.0*a[index][1]/a[index][2])){
temp[1][1]=a[index][1];temp[1][2]=a[index][2];
a[index][1]=a[i][1];a[index][2]=a[i][2];
a[i][1]=temp[1][1];a[i][2]=temp[1][2];
}
}
for(i=1;i<=n;i++){
h+=a[i][2];
if(h<=m) w=w+a[i][1];
else {w+=(a[i][2]-h+m)*1.0*a[i][1]/a[i][2]; break;
}
}
printf("%.3f\n",w);
}
return 0;
}
追问
我主要想问我写的基本上也和其他网上的代码思路一样,测试好多数据也成功,但为什么就是AC不了,主要是想问AC不了的原因,而不是只是想AC。可能我的代码看起来比较麻烦,没有注释。但主要思想就是先将房间每一份猫食所能换java bean从大到小排列,然后在按顺序取就可以了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水冰天之痕
2013-05-18 · TA获得超过716个赞
知道小有建树答主
回答量:1254
采纳率:50%
帮助的人:1153万
展开全部
有前辈如是说

四舍五入数据
1 1
1 2000
0.001
更多追问追答
追问
1/2000 结果应该为0.0005,按照四舍五入确实是0.001,可是我运行了结果确实0.000,这怎么解决?
追答
都过去一个月了……

//JDK1.5和数据小的时候可以这样
DecimalFormat fmt=new DecimalFormat("0.000");
System.out.println(fmt.format(Math.round(result*1000)/1000.0));

//JDK更高的可以这样,可见杭电的判定做的一般般
System.out.printf("%0.3f\r\n",result);

//正常的只要一个换行就够了,非要严格要求windows下的换行
//System.out.printf("%0.3f\n",result);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式