c语言-宝物的选择
本帖最后由 arthemis911222 于 2014-12-14 18:07:30 编辑
#include
#include
#include
using namespace std;
int main()
{
int a[100],b[100];
double c[100],d[100],big=0;
int i,j,w,n;
scanf("%d%d",&w,&n);
for(i=0;i
{
scanf("%d%d",&a[i],&b[i]);
c[i]=b[i]/(a[i]*1.0);
d[i]=c[i];
}
sort(d,d+n-1);
for(i=n-1;i>=0;i--)
{
for(j=0;j
{
if(c[j]==d[i]&&w>0)
{
if(w>=a[j])
big=big+b[j];
else
big=big+c[j]*w;
w=w-a[j];
}
}
}
printf("%.2lf\n",big);
}
题目是:
小鱼儿在一次探险途中发现了一个山洞,并且在这个山洞里找到了宝藏,可是小鱼儿发现想要把宝藏全部带走是不可能的(因为他只带了一个袋子),不过很快他就发现每个宝物旁边都有几个字,上面写着宝物的体积和价值,而且这些宝物可以分割成任意大小。小鱼儿想知道如何选取宝物,才能使带走宝物的价值最大。
测试数据:
1000 100
79 1
71 45
97 37
18 48
99 12
17 91
15 87
78 55
4 12
22 74
49 70
100 50
92 15
63 13
55 79
42 26
25 100
57 32
76 45
41 16
89 46
3 35
36 48
82 80
71 21
82 91
65 23
13 39
40 41
76 5
78 98
73 61
54 76
72 57
63 56
59 16
51 85
21 100
20 98
10 47
37 60
32 22
37 98
91 60
93 95
61 69
24 25
89 18
23 63
54 68
74 18
23 51
85 32
24 42
98 41
52 80
22 33
20 20
38 77
40 80
71 8
23 46
95 10
98 100
11 72
25 87
70 43
86 54
67 74
3 20
11 73
98 94
21 60
45 77
15 70
94 55
90 58
88 20
61 67
76 100
98 96
63 7
54 43
41 45
46 13
24 71
44 30
13 61
22 9
28 24
96 23
98 7
27 36
45 78
14 82
70 70
52 77
62 3
43 95
77 67
2568.67
求教代码哪里错了?
------解决思路----------------------
struct shemmegui{
int tiji;
int jiazhi;
double average;
};
#include
int main()
{
struct shemmegui t,a[100];
struct shemmegui temp;
int v,n,i,k;
double m,max;
scanf("%d%d",&v,&n);
for(i=0;i
{
scanf("%d%d",&t.tiji,&t.jiazhi);
t.average=t.jiazhi*1.0/t.tiji;
a[i]=t;
}
for(i=0;i
{
for(k=0;k
{
if(a[k].average>a[i].average)
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
}
m=0;
max=0;
for(i=0;i
{
if(a[i].tiji>v&&v>0)
{
m=m+a[i].average*v;
v=0;
if(m>max) max=m;
}
if(a[i].tiji<=v&&v>0)
{
m=m+a[i].jiazhi;
v=v-a[i].tiji;
if(m>max)
{
max=m;
}
}
}
printf("%.2lf\n",max);
return 0;
}
------解决思路----------------------
如果上面的是你的代码,我看出来一个问题,double类型不能用 == ,如果想用就得这样 fabs( c [ j ] - d[ i ] )