作业帮 > 综合 > 作业

如何编写一个C语言程序,实现在n个数字里面抽取m个数字:

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/25 15:56:27
如何编写一个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
// 兵无常势,水无常形,递归遮罩,玲巧组合
#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();
}