2 xwinterwinterwinterx XwinterwinterwinterX 于 2016.04.11 21:54 提问

请问大家这段代码哪里错了,为什么总是Wrong Answer

#include <algorithm>
#include <iostream>
using namespace std;
struct node
{
    int cost,weight;
};
int cmp (node a, node b)
{
   return a.weight<b.weight;
}
int main()
{
    int n;
    int kinds,i;
    double ans,temp,money;
    node data[1000];
    scanf("%d",&n);
    while(n--)
    {
        ans=0;
        scanf("%lf%d",&money,&kinds);
        for(i=0;i<kinds;i++)
        scanf("%d%d",&data[i].cost,&data[i].weight);
        sort(data,data+kinds,cmp);
        for(i=0;i<kinds;i++)
        {
            if(money>=data[i].cost*data[i].weight)
            {
                ans+=(double)data[i].weight;
                money-=(double)data[i].cost*data[i].weight;
            }
            else
            {
                temp=(double)money/data[i].cost;
                ans+=temp;
                money-=(double)temp*data[i].cost;
            }
        }
        printf("%.2lf\n",ans);
    }
    return 0;
}

如果把排序改成qsort的话,就可以通过,不知道为什么

4个回答

XwinterwinterwinterX
XwinterwinterwinterX   2016.04.11 21:56
XwinterwinterwinterX
XwinterwinterwinterX 这是题目的地址,我贴的代码跟网站里的代码只有排序是不同的
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.11 22:03

请问这段代码那错了啊?
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

XwinterwinterwinterX
XwinterwinterwinterX   2016.04.11 22:11
B100402352
B100402352   2016.04.17 18:39

提供给你一个思路,sort需要一个返回类型为bool的函数,结果只有两种: a < b,a >= b,你这里虽然是int,其实调用时仍然会转成bool。
而qsort需要一个返回int类型的函数,正负分别表示大小关系,0表示相等。因此两者的效果是不一样的。我不知道你的题目要求,也没看你具体逻辑实现,但是可以肯定的是,了解了这两者的区别,是一定能搞明白这个程序为什么wrong answer的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!