ACM 一道题目 求大神给个思路或者代码
给出一个数字a,如 60,依次 再给出b个数字, 20 30 10 50 60,输出所有能组成数字a的组合
如输入60
5
20 30 10 50 60
则输出 20 30
10 50
60
求大神给个思路 或者代码 谢谢
#include <stdio.h> void display(int ans[], int len) { for (int i = 0; i < len; ++i) { printf("%d%c", ans[i], "\n "[i + 1 < len]); } } /* * @param ssa 待遍历的数组 * @param lsa 待遍历的数组的长度 * @param ans 存储结果的数据 * @param len 存储结果的数据的长度 * @param sum 当前ans中数据的和 * @param pos 当前遍历位置 * @param res 需要得到的结果 */ void fun(int ssa[], int lsa, int ans[], int len, int sum, int pos, int res) { if (sum == res) { display(ans, len); return; } if (sum > res || pos >= lsa) return; fun(ssa, lsa, ans, len, sum, pos + 1, res); sum += ssa[pos]; ans[len] = ssa[pos]; fun(ssa, lsa, ans, len + 1, sum, pos + 1, res); } int main(int argc, char *argv[]) { int ss[32] = {0}; int sa[] = {20, 30, 10, 50, 60}; fun(sa, 5, ss, 0, 0, 0, 60); return 0; }