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;
}
