m元素集合的n个元素子集- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 20
- int main(void) {
- int set[MAX];
- int m, n, position;
- int i;
- printf("输入集合个数 m:");
- scanf("%d", &m);
- printf("输入取出元素 n:");
- scanf("%d", &n);
- for(i = 0; i < n; i++)
- set[i] = i + 1;
- // 显示第一个集合
- for(i = 0; i < n; i++)
- printf("%d ", set[i]);
- putchar('\n');
-
- position = n - 1;
- while(1) {
- if(set[n-1] == m)
- position--;
- else
- position = n - 1;
- set[position]++;
- // 调整右边元素
- for(i = position + 1; i < n; i++)
- set[i] = set[i-1] + 1;
- for(i = 0; i < n; i++)
- printf("%d ", set[i]);
- putchar('\n');
- if(set[0] >= m - n + 1)
- break;
- }
- return 0;
- }
复制代码
|