阿里巴巴装袋问题
2015-07-22 11:36
369 查看
【任务描述】
阿里巴巴进入四十大盗的宝库后,发现里面宝物众多,并且每种宝物都有体积和价值的标注,如何尽可能地多装宝物,是宝物的价值最大,但不能超过口袋容量。(口袋体积是150)
程序:
阿里巴巴进入四十大盗的宝库后,发现里面宝物众多,并且每种宝物都有体积和价值的标注,如何尽可能地多装宝物,是宝物的价值最大,但不能超过口袋容量。(口袋体积是150)
宝物 | A | B | C | D | E | F | G | H | I | J |
体积 | 35 | 25 | 30 | 60 | 50 | 20 | 40 | 10 | 20 | 25 |
价值 | 10 | 30 | 40 | 30 | 50 | 100 | 35 | 40 | 30 | 35 |
#include<stdio.h> #include<stdlib.h> int comp(const void *a,const void *b) { return *(double *)a>*(double *)b ? 1 : -1;//注意这里 } struct Treasure { char name; int volume; int value; double ratio; }; int main() { Treasure t[10]/*,temp*/; int i,/*j,*/sum=0,value=0; printf("请输入宝物的体积和价值:\n"); for(i=0;i<10;i++) { t[i].name=i+'A'; printf("第%d件宝物的体积和价值:\n",i+1); scanf("%d%d",&t[i].volume,&t[i].value); t[i].ratio=t[i].value/double(t[i].volume); } qsort(t,10,sizeof(t[0]),comp);//qsort和选择排序都可以 /* for(i=0;i<9;i++) for(j=i+1;j<10;j++) { if(t[i].ratio<t[j].ratio) { temp=t[i]; t[i]=t[j]; t[j]=temp; } }*/ printf("装入的是:\n"); for(i=0;i<10;i++) { sum=sum+t[i].volume; if(sum>150) { sum=sum-t[i].volume; break; } printf("%c, ",t[i].name); value=value+t[i].value; } printf("总价值是%d\n",value); printf("总体积是%d\n",sum); return 0; }
相关文章推荐
- hdu 5289 Assignment(2015 Multi-University Training Contest 1)
- Gradle DSL method not found: 'android()
- 环境变量
- 工控自动化通讯测试工具总结之--串口
- Extjs和jQuery的区别
- 几个交互设计的原则
- 异地备份mongo
- swift UITableViewCell 中的单选控制样式
- Git fetch和git pull的区别(转)
- LAMP编译安装
- opencv3.0+VS2013平台人脸检测MFC
- Web漏洞检测及修复方案
- linux常用命令:mkdir,more,less,
- Android 之短信验证码自动填写
- C#下载局域网共享文件夹中的文件
- 这是stanford大学的数据库分析
- openwrt编译出错处理记录
- 加班理由总结
- jsonp
- append 和appendTo ,appendChild,insertBefore实例