本题的关键在随意取几个数, 因此和以前解过的true or false问题思路一样.网上一搜才发现这是一类问题, 称01背包问题
我们可以使用递归来列举出所有的排列组合情况,共有2的n次方中情况, 然后筛选其中和为m的排列, 将其打印出来即可.
这n个数中, 每一个数都有选取和不选取两种情况, 比如第一个数如果选取, 那么剩余的9 个元素其和应该为m -1, 如果第一个数不选取, 那么剩余的9个元素其和应该为m.
解法如下:
#include <stdio.h>
#include <stdlib.h>
#define N 100
void findarray(int mark[], int start, int end, int sum);
int main(void)
{
int sum, n;
int mark[N] = {0};
printf("Enter n, m: ");
scanf("%d %d", &n, &sum);
printf("result: \n");
findarray(mark, 1, n, sum);