m个元素的n元素子集(c/python略)

来源:互联网 发布:超市自动播音软件 编辑:程序博客网 时间:2024/05/16 06:28

解法
假设有5个元素的集点,取出3个元素的可能子集如下:
{1 2 3} 、 {1 2 4 } } 、 {1 2 5} 、{1 3 4} 、{1 3 5} 、{1 4 5} 、 {2 3 4} 、 {2 3 5} 、{2 4 5} 、 {3 4 5}
这些子集已经使用字典顺序排列,如此才可以观察出一些规则:
如果最右一个元素小于m,则如同码表一样的不断加 1
如果右边一位已至最大值,则加1的位置往左移
每次加1的位置往左移后,必须重新调整右边的元素为递减顺序

c代码

#include<stdio.h>#include<stdlib.h>#define N 10int main(){    int m, n;    printf("输入集合个数:");    scanf_s("%d", &m);    printf("输入取出元素个数:");    scanf_s("%d", &n);    int num[N];    int i;    for (i = 0; i < n; i++)    {        num[i] = i + 1;    }    for (i = 0; i < n; i++)        printf("%d", num[i]);    printf("\n");    int position = n - 1;    while (1)    {        if (num[n - 1] == m)            position--;        else            position = n - 1;        num[position]++;        for (i = position; i < n-1; i++)        {            num[i + 1] = num[i] + 1;        }        for (i = 0; i < n; i++)        {            printf("%d", num[i]);        }        printf("\n");        if (num[0] == m - n + 1)            break;    }    system("pause");    return 0;}
原创粉丝点击