免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: fender0107401
打印 上一主题 下一主题

[算法] 算了算了,我错了,以后不这么玩了。 [复制链接]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
41 [报告]
发表于 2014-08-28 08:48 |只看该作者
话说,我从来就没打算真让3出去裸奔。

论坛徽章:
0
42 [报告]
发表于 2014-08-28 09:02 |只看该作者
恶心!


技术论坛混讲究的是艺压当行人,

你要写出来一份让大家都认可的代码以后,不让BlueGuy去裸奔,那是你高风亮节。

现在这种和稀泥的手段,只能让人觉得你恶心。

要么,你认真的写份代码,要么,你诚恳的承认不行,都算你为人光棍,

唱这么一出,真叫人恶心。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
43 [报告]
发表于 2014-08-28 09:14 |只看该作者
blue_guy 发表于 2014-08-28 09:02
恶心!


好,我技术差,人品差,没能力。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
44 [报告]
发表于 2014-08-28 10:22 |只看该作者
本帖最后由 cobras 于 2014-08-28 10:28 编辑

没有用教材上的递推公式。用了一个笨方法实现。
  1. /* knapsack.c */

  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <time.h>

  6. struct item
  7. {
  8.         int choosed;
  9.         int id;
  10.         int c;
  11.         int w;
  12. };

  13. struct item *create_items(int n)
  14. {
  15.         struct item *items;
  16.         int size;
  17.         int i;

  18.         size = n * sizeof(struct item);
  19.         items = (struct item *)malloc(size);
  20.         if (items != NULL) {
  21.                 memset(items, 0, size);
  22.                 srand(time(NULL));
  23.                 for (i = 0; i < n; ++i) {
  24.                         items[i].choosed = 0;
  25.                         items[i].id = i;
  26.                         items[i].c = rand() % 100 + 1;
  27.                         items[i].w = rand() % 100;
  28.                 }
  29.                 return items;
  30.         }
  31.         return NULL;
  32. }

  33. int release_items(struct item *items)
  34. {
  35.         free(items);
  36.         return 0;
  37. }

  38. int compare_item_value(const struct item *item1, const struct item *item2)
  39. {
  40.         long data1, data2;

  41.         data1 = item1->w * item2->c;
  42.         data2 = item2->w * item1->c;
  43.         if (data1 < data2) {
  44.                 return 1;
  45.         }else if (data1 > data2) {
  46.                 return -1;
  47.         }else {
  48.                 return 0;
  49.         }
  50. }

  51. int compare_item_id(const struct item *item1, const struct item *item2)
  52. {
  53.         if (item1->id < item2->id) {
  54.                 return -1;
  55.         }else if (item1->id > item2->id) {
  56.                 return 1;
  57.         }else {
  58.                 return 0;
  59.         }
  60. }

  61. int choose_items(struct item *items, int n, int v)
  62. {
  63.         int i;

  64.         for (i = 0; i < n; ++i) {
  65.                 if (items[i].c <= v) {
  66.                         items[i].choosed = 1;
  67.                         v -= items[i].c;
  68.                 }
  69.         }
  70.         return 0;
  71. }

  72. int print_items(struct item *items, int n)
  73. {
  74.         int i;

  75.         for (i = 0; i < n; ++i) {
  76.                 printf("id=%d, c=%d, w=%d, %s\n", items[i].id, items[i].c, items[i].w, items[i].choosed ? "CHOOSED" : "");
  77.         }
  78.         return 0;
  79. }

  80. int main(void)
  81. {
  82.         struct item *items;
  83.         int n;
  84.         int v;

  85.         n = 10;
  86.         v = 100;
  87.         printf("Please Input (N,V): ");
  88.         scanf("%d %d", &n, &v);
  89.         printf("N=%d, V=%d\n", n, v);
  90.         items = create_items(n);
  91.         if (items != NULL) {
  92.                 puts("SOURCE ITEMS:");
  93.                 print_items(items, n);
  94.                 qsort(items, n, sizeof(struct item), compare_item_value);
  95.                 puts("SORTED ITEMS:");
  96.                 print_items(items, n);
  97.                 choose_items(items, n, v);
  98.                 qsort(items, n, sizeof(struct item), compare_item_id);
  99.                 puts("CHOOSED ITEMS:");
  100.                 print_items(items, n);
  101.                 release_items(items);
  102.                 return 0;
  103.         }
  104.         return -1;
  105. }
复制代码

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
45 [报告]
发表于 2014-08-28 10:30 |只看该作者
试了VS2013和Codeblocks都无法正常编译的?~
  1. 1>c:\users\susake\desktop\win32project1\win32project1\源.cpp(118): error C2664: “void qsort(void *,size_t,size_t,int (__cdecl *)(const void *,const void *))”: 无法将参数 4 从“int (__cdecl *)(const item *,const item *)”转换为“int (__cdecl *)(const void *,const void *)”
  2. 1>          在匹配目标类型的范围内没有具有该名称的函数
  3. 1>c:\users\susake\desktop\win32project1\win32project1\源.cpp(122): error C2664: “void qsort(void *,size_t,size_t,int (__cdecl *)(const void *,const void *))”: 无法将参数 4 从“int (__cdecl *)(const item *,const item *)”转换为“int (__cdecl *)(const void *,const void *)”
  4. 1>          在匹配目标类型的范围内没有具有该名称的函数
复制代码

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
46 [报告]
发表于 2014-08-28 10:33 |只看该作者
Susake_ 发表于 2014-08-28 10:30
试了VS2013和Codeblocks都无法正常编译的?~


用   .c,别用.cpp

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
47 [报告]
发表于 2014-08-28 10:36 |只看该作者
回复 46# hellioncu
嗯,thx

   

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
48 [报告]
发表于 2014-08-28 10:40 |只看该作者
楼主给力,坐等视频

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
49 [报告]
发表于 2014-08-28 10:41 |只看该作者
都散了吧,上面那个C代码不是我贴的,3不用去裸奔。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
50 [报告]
发表于 2014-08-28 10:41 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP