c语言 跪求:输入M个数从中取N个数进行组合并输出所有组合项
M、N都是不固定的,例如输入M可以是3、5、9、24也可以是8、4、7、21、6、11,N可以是2也可以是5,当然N<M.(注:要C语言源码,本人只学了C,而且M、N值可...
M、N都是不固定的,例如输入M可以是3、5、9、24也可以是8、4、7、21、6、11,N可以是2也可以是5,当然N<M.(注:要C语言源码,本人只学了C,而且M、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等等输出所有组合项。输入的数与个数不定 展开
不是随机取,是手动输入,例如,手动输入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等等输出所有组合项。输入的数与个数不定 展开
4个回答
展开全部
典型的组合问题,解法有递归、回溯等等
递归法较简单,代码如下:
void 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");
}
}
}
其他方法可查阅相关资料。
递归法较简单,代码如下:
void 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");
}
}
}
其他方法可查阅相关资料。
更多追问追答
追问
源码运行结果:
5 4 3 2
5 4 3 1
5 4 2 1
5 3 2 1
4 3 2 1
请按任意键继续. . .
虽然也是输出组合,可是输入的数不一定是1、2、3、4、5,取出的数也不一定是4个啊!不过还是谢谢你!我要个具有普遍性、实用性的,而不是仅仅对1 2 3 4 5进行组合
追答
源码里数组a是从1到100,你可以根据自己的需要传入其他的数组啊。
展开全部
因为是手动输入,你就将程序简化为:输入几个数,如2,8,10,然后输出所有组合。然后给简化部分增加判断的部分,判断手动输入的那几个数是不是在第一次输入的数里边,并作出错处理!这样就简单多了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
抱歉 我帮你想了一个循环的算法 但是由于你要的是手动输入提取数的个数 由于事先无法确定循环的层数 所以我搞不定 实在抱歉 但是如果N是确定话 那么就可以解决了 就是多加几层循环嵌套而已
没能帮到你 真的很遗憾
没能帮到你 真的很遗憾
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请搜索一下“C语言动态数组”或“C语言动态内存分配”
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询