文章

16

粉丝

50

获赞

1

访问

3.4k

头像
高分篇的喝饮料问题(1478)
我要提问
发布于2024年3月1日 19:05
阅读数 326

商店里有 n 中饮料,第 i 种饮料有 mi 毫升,价格为 wi。小明现在手里有 x 元,他想吃尽量多的饮料,于是向你寻求帮助,怎么样买才能吃的最多。请注意,每一种饮料都可以只买一部分。

 

我运行的结果跟书上不一样,就想测试排序是否出错,但是结果显示有误,请问是cmp函数哪里出错了 (按每毫升算排序结果应该是输入顺序呀)

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
struct drink
{
    double mi,wi;
}p[105];
int cmp(const void *a,const void *b)
{
    double c=(*(drink*)a).mi,d=(*(drink *)b).mi;
    double e=(*(drink *)a).wi,f=(*(drink*)b).wi;
    double av1=e/c,av2=f/d;
    return av1-av2;//按照每毫升的价格升序排列 


int  main()
{
   int n,x;
   double sum=0;
   scanf("%d %d",&n,&x);
   for(int i=1;i<=n;i++)
   {
       scanf("%lf%lf",&p[i].mi,&p[i].wi);
   }
   qsort(p,n,sizeof(p[0]),cmp);
   for(int i=1;i<=n;i++)
   {
    &nbs...

登录查看完整内容


登录后发布评论

1 条评论
snake VIP
2024年3月1日 22:08

qsort(p+1,n,sizeof(p[0]),cmp);

qsort函数第一个参数是首地址,数组下标从1开始存就要+1

赞(0)