假设我有一个数组{1,2,3}
我希望获得其数字的所有可能组合的总和,并将它们存储在另一个数组中,如下所示:
1 + 2 = 3
1 + 2 + 3 = 6
1 + 3 = 4
2 + 3 = 5
1
2
3
新数组将包含{3,6,4,5,1,2}
我应该使用已知的算法吗? 请求
答案 0 :(得分:1)
你可以非常依赖二进制数字可以代表组合这一事实,如果你只关心那些具有多个值的组合,那么它很容易跳过两个幂,这是一位设置的值。
这并不是你想做的一切,但这是一个开始,你可以从那里适应:
#include <stdlib.h>
#include <stdio.h>
void try_sums(int *args, size_t argc) {
int top = 1 << (argc - 1);
int skip = 1;
for (int i = 1; i < top; ++i) {
if (i == skip) {
skip <<= 1;
}
else {
int sum = 0;
for (int j = 0, k = i; k; k >>= 1, ++j) {
if (k & 1) {
if (sum) {
printf("+");
}
printf("%d", args[j]);
sum += args[j];
}
}
printf("=%d\n", sum);
}
}
}
int main(int argc, char **argv) {
int *terms = malloc(sizeof(int) * argc);
for (int i = 1; i < argc; ++i) {
terms[i - 1] = atoi(argv[i]);
}
try_sums(terms, argc);
free(terms);
return 0;
}