C语言 跪求:输入M个数从中取N个数进行组合并输出所有组合项

lwhger 2012-10-13 08:34:24
输入M个数从中取N个数进行组合并输出所有组合项,M、N都是不固定的,例如输入M可以是3、5、9、24也可以是8、4、7、21、6、11,N可以是2也可以是5,当然N<M.(注:要C语言源码,本人只学了C,而且M、N值可以随时输入的)全人在百度搜了一整天也没想要的答案,哪位大侠懂得请帮帮忙,灌水勿犹,谢谢~!
...全文
1684 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
han1558249222 2014-05-18
  • 打赏
  • 举报
回复
那个答案不对呀
lwhger 2012-10-13
  • 打赏
  • 举报
回复
我刚学C,能不能写具体点的源码
guochanoo7 2012-10-13
  • 打赏
  • 举报
回复
这个用递归就行,无非有两种情况,一种是取第一个,人后从M-1个当中取N-1个,或者第一个不取,从M-1个当中取N个,这不就形成递归了么,递归结束的条件就是要取得个数小于或者等于0.,这个百度应该能搜到吧,何海涛的博客有类似的题目
manxiSafe 2012-10-13
  • 打赏
  • 举报
回复
额,已经结了啊,没注意
manxiSafe 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
你这源码运行如下:
5 4 3 2
5 4 3 1
5 4 2 1
5 3 2 1
4 3 2 1
请按任意键继续. . .
虽然不对,也谢谢你!
[/Quote]
汗,本来就是测试的代码,你要输入 加个输入就好了。


既然好了,就结账咯


呵呵
lwhger 2012-10-13
  • 打赏
  • 举报
回复
我把你的源码改下可以实现了,感谢你无法用语言表达!!!!
lwhger 2012-10-13
  • 打赏
  • 举报
回复
问题补充:
我要的是输入几个数再从这几个数中取N个数进行组合并输出所有组合项,
也不是随机取,是手动输入,例如,手动输入4个数:3、5、9、24取其中2个数进行组合,如3-5 3-9 3-24 5-9等等输出所有组合项;又如手动输入6个数4、7、9、12、1、2取其中3个数进行组合,如4-7-9 4-7-12等等输出所有组合项。输入的数与个数不定,具有普遍性、实用性的,而不是仅仅对1 2 3 4 5进行组合
lwhger 2012-10-13
  • 打赏
  • 举报
回复
你这源码运行如下:
5 4 3 2
5 4 3 1
5 4 2 1
5 3 2 1
4 3 2 1
请按任意键继续. . .
虽然不对,也谢谢你!
manxiSafe 2012-10-13
  • 打赏
  • 举报
回复 1
//id combine(int a[], int n, int m, int b[], int M);

//参数:
//a 存放候选数字
//n 总项数
//m 取出项数
//b 存放选出结果
//M = m

#include "stdio.h"
#define MAX 100

void combine(int a[], int n, int m, int b[], int M);

int main(void)
{
int i;
int a[MAX], b[MAX];

for (i = 1; i < 100; i++)
a[i - 1] = i;

combine(a, 5, 4, b, 4);
}

void combine(int a[], int n, int m, int b[], int M)
{
int i, j;

for (i = n; i >= m; i--)
{
b[m - 1] = i - 1;
if (m > 1)
combine(a, i - 1, m - 1, b, M);
else
{
for (j = M - 1; j >= 0; j--)
printf("%d ", a[b[j]]);
printf("\n");
}
}
}

70,011

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧