免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2347 | 回复: 9
打印 上一主题 下一主题

[算法] 只用循环把指定列数的所有组合都打印出来,代码怎么写? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-13 12:51 |只看该作者 |倒序浏览
本帖最后由 coderit 于 2012-11-13 12:54 编辑

给定一有n个数的数列,比如:2, 6, 12, 3, 15, 8, 19...
要求只用循环,不能用函数递归,把这列数的所有组合都打印出来(不是打印组合值),代码怎么写?

论坛徽章:
0
2 [报告]
发表于 2012-11-13 14:49 |只看该作者
什么规律 看不出来

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [报告]
发表于 2012-11-13 15:15 |只看该作者
什么叫“所有组合”?
比如数列{1,2}
是 {1,2}, {2,1}
还是 {1}, {2}, {1,2}
抑或是 {1}, {2}, {1,2} ,{2,1}?

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-14 12:20:38
4 [报告]
发表于 2012-11-13 15:19 |只看该作者

把递归转化为循环是可以的。不过很麻烦。

论坛徽章:
0
5 [报告]
发表于 2012-11-13 15:27 |只看该作者
回复 3# bruceteen

比如 1 ,  5  ,  3

如果取2组合,输出就是:

1 , 5
1 , 3
5 , 3
   

论坛徽章:
0
6 [报告]
发表于 2012-11-13 20:32 |只看该作者
next_combination

论坛徽章:
0
7 [报告]
发表于 2012-11-20 15:03 |只看该作者
先排序 再 i = 0 ;i < j  再一个数的组合 再两个 。。。N个数  不知道你理解了没 很简单

论坛徽章:
0
8 [报告]
发表于 2012-11-20 23:05 |只看该作者
回复 1# coderit
  1. [asm1.dsgdata.com]:[/tmp]$ cat b.c
  2. #include <stdio.h>


  3. #define VCNT   4
  4. static void _vprint(int *v, int cnt, int x)
  5. {
  6.   int   i, j, p;

  7.   printf("\n------------- %d/%d -------------\n", x, cnt);
  8.   for (i=0; i<cnt; i++)
  9.   {
  10.     p = 0;
  11.     for (j=i; j<cnt; j++)
  12.     {
  13.       printf("%d, ", v[j]);
  14.       p++;
  15.       if (p >= x)
  16.       {
  17.         printf("\n");
  18.         break;
  19.       }
  20.     }

  21.     for (j=0; p<x; j++)
  22.     {
  23.       printf("%d, ", v[j]);
  24.       p++;
  25.     }
  26.     if (j > 0)
  27.       printf("\n");
  28.   }

  29.   printf("\n");
  30. }

  31. int main(int argc, char **argv)
  32. {
  33.   int   v[VCNT] = {1, 3, 5, 8};

  34.   _vprint(v, VCNT, 1);
  35.   _vprint(v, VCNT, 2);
  36.   _vprint(v, VCNT, 3);
  37.   _vprint(v, VCNT, 4);
  38.   return (0);
  39. }
  40. [asm1.dsgdata.com]:[/tmp]$ ./a

  41. ------------- 1/4 -------------
  42. 1,
  43. 3,
  44. 5,
  45. 8,


  46. ------------- 2/4 -------------
  47. 1, 3,
  48. 3, 5,
  49. 5, 8,
  50. 8, 1,


  51. ------------- 3/4 -------------
  52. 1, 3, 5,
  53. 3, 5, 8,
  54. 5, 8, 1,
  55. 8, 1, 3,


  56. ------------- 4/4 -------------
  57. 1, 3, 5, 8,
  58. 3, 5, 8, 1,
  59. 5, 8, 1, 3,
  60. 8, 1, 3, 5,
复制代码

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
9 [报告]
发表于 2012-12-25 18:07 |只看该作者
挖个坟......

论坛徽章:
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
10 [报告]
发表于 2012-12-26 09:00 |只看该作者
回复 9# captivated


    人家这是新坟,入土还未安呢,怪叔不厚道啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP