文章
16
粉丝
82
获赞
1
访问
13.7k
商店里有 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...
登录后发布评论
qsort(p+1,n,sizeof(p[0]),cmp);
qsort函数第一个参数是首地址,数组下标从1开始存就要+1