如何编写一个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/06/28 06:53:46
![如何编写一个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](/uploads/image/z/13635245-29-5.jpg?t=%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AAC%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%2C%E5%AE%9E%E7%8E%B0%E5%9C%A8n%E4%B8%AA%E6%95%B0%E5%AD%97%E9%87%8C%E9%9D%A2%E6%8A%BD%E5%8F%96m%E4%B8%AA%E6%95%B0%E5%AD%97%EF%BC%9Ae.g.%EF%BC%9A%E8%BE%93%E5%85%A5n%3D5%2Cm%3D4%E2%86%92%E8%BE%93%E5%85%A55%E4%B8%AA%E6%95%B0%E5%AD%97%EF%BC%9A1+2+3+4+5%E2%86%92%E8%BE%93%E5%87%BA%E6%89%80%E6%9C%894%E4%B8%AA%E6%95%B0%E5%AD%97%E7%9A%84%E7%BB%84%E5%90%88%EF%BC%9A1+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 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();
}