Ponytai1 2016-09-12 03:59 采纳率: 25%
浏览 2038

PAT 中的基础题 1020. 月饼 (25)

 #include <stdio.h>
#include <stdlib.h>
struct mk
{
    double storage;
    double sumPrice;
    double perPrice;
};
int cmp(const void *a,const void *b)           //用于qsort按照单价排序 
{
    struct mk m1 = *(struct mk*)a;
    struct mk m2 = *(struct mk*)b;
    return m2.perPrice - m1.perPrice;
}
int main ()
{
    int num;
    double need;
    double ret = 0.0;
    scanf("%d %lf",&num,&need);
    struct mk list[1100];
    int i;
    for(i = 0;i < num;i++)
    {
        scanf("%lf",&list[i].storage);
    }
    for(i = 0;i < num;i++)
    {
        scanf("%lf",&list[i].sumPrice);
    }
    for(i = 0;i < num;i++)                       //以上为输入 
    {
        list[i].perPrice = list[i].sumPrice/list[i].storage;    
    }
    qsort(list,num,sizeof(list[0]),cmp);
    i = 0;
    while(need != 0)
    {
        if(need > list[i].storage)          //需求大于库存 
        {
            need = need - list[i].storage;
            ret = ret + list[i].sumPrice; 
            if( i == num-1)                     //全部用完还是没满足需求 
            {
                need = 0;
            }
        }
        else                       //需求小于库存 
        {
            ret = ret + list[i].perPrice * need;
            need = 0;
        }
        i++;
    }
    printf("%.2lf\n",ret);                   
    return 0 ;
}

实在是不知道第一个测试点哪里错了,其他都对啊。跪求大神解答

题目连接https://www.patest.cn/contests/pat-b-practise/1020

  • 写回答

1条回答

  • 呆的久 2016-09-12 04:59
    关注

    排序算法的问题
    int cmp() 最后一行
    return m2.perPrice - m1.perPrice;
    改成
    return m2.perPrice > m1.perPrice?1:-1;

    perPrice是都double类型的,cmp返回值是int,计算m2.perPrice - m1.perPrice会有误差.
    比如计算出m2.perPrice-m1.perPrice = 0.1234,你期待return的是1,但实际被截断后return的时候是0.

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置