如何编写一个C语言程序,实现在n个数字里面抽取m个数字:e.g.:输入n=5,m=4→输入5个数字:1 2 3 4 5→输出所有4个数字的组合:1 2 3 41 2 3 51 3 4 52 3 4 5
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/14 21:30:32
如何编写一个C语言程序,实现在n个数字里面抽取m个数字:e.g.:输入n=5,m=4→输入5个数字:1 2 3 4 5→输出所有4个数字的组合:1 2 3 41 2 3 51 3 4 52 3 4 5
如何编写一个C语言程序,实现在n个数字里面抽取m个数字:
e.g.:输入n=5,m=4
→输入5个数字:1 2 3 4 5
→输出所有4个数字的组合:1 2 3 4
1 2 3 5
1 3 4 5
2 3 4 5
如何编写一个C语言程序,实现在n个数字里面抽取m个数字:e.g.:输入n=5,m=4→输入5个数字:1 2 3 4 5→输出所有4个数字的组合:1 2 3 41 2 3 51 3 4 52 3 4 5
// 兵无常势,水无常形,递归遮罩,玲巧组合
#include <stdio.h>
#define SWAP(a, b) a^=b^=a^=b;
int m, n;
int ar[20], arr[20];
void output()
{
int i,k;
for (i = k = 0; i < n && k < m; i++)
{
if (ar[i])
{
k ++;
printf("%d ", arr[i]);
}
}
printf("\n");
}
void combine(int l)
{
int p;
if (-1 < l)
{
p = l;
while(l + 1 < n && !ar[ l + 1 ])
{
SWAP(ar[p], ar[l+1]);
output();
combine(p - 1);
SWAP(ar[p], ar[l+1]);
l ++;
}
}
}
void main()
{
int i;
printf("Input n: ");
scanf_s("%d", &n);
printf("Input m: ");
scanf_s("%d", &m);
printf("Input numbers: ");
for (i=0; i<n; i++)
{
ar[i] = (i<m) ? 1 : 0;
scanf_s("%d", &arr[i]);
}
printf("The combines are:\n");
output();
if (m < n)
{
combine(m-1);
}
scanf_s("%c", &m);
getchar();
}