2 qq 33825615 qq_33825615 于 2016.09.12 11:59 提问

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个回答

dead911
dead911   2016.09.12 12: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.

qq_36259539
qq_36259539 一语道破~
4 个月之前 回复
qq_33825615
qq_33825615 啊,非常感谢啊。谢谢了,我找了一上午也没发现,看来基本功还是太差。 谢谢!
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
PAT乙级—1020. 月饼 (25)-native
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及
PAT Basic 1020. 月饼 (25)(C语言实现)
最新内容已发布在 我的Github Pages, CSDN内容暂时不更新(将来有计划更新), 请前往链接查看最新内容. 欢迎star 我的repo题目月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有...
编程题目: PAT 1020. 月饼 (25)
1020. 月饼 (25) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及
PAT(B) - 1020. 月饼 (25)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以...
PAT - 甲级 - 1020. Tree Traversals (25)(层次遍历)
题目描述: Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence o
1020. Tree Traversals (25)-PAT甲级真题
1020. Tree Traversals (25) Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level ord
Pat 1020. 月饼 (25)
1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及
PAT --- 1020. 月饼 (25)
1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及
1020. 月饼 (25) PAT
1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及
PAT 1020. 月饼 (25)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。 注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种