我有一个由m个整数组成的数组,我想检查数组中是否有4个整数(允许重复),它们加和成给定的整数n。
例如,如果存在数组[8,4,2,1],并且n = 8,则可能的组合为-{2,2,2,2},{4,2,1,1}
目前,我正在使用4个for循环进行计数,如下所示:
int ans = 0;
for(int a = 0; a<arr.size(); a++) {
for(int b = 0; b<arr.size(); b++) {
for(int c = 0; c<arr.size(); c++) {
for(int d = 0; d<arr.size(); d++) {
if(arr[a] + arr[b] + arr[c] + arr[d] == n) ans++;
}
}
}
}
printf("%d", ans);
答案 0 :(得分:1)
X
进行排序,以删除重复项。C[0]^4
到最小的C[3]^4
,丢弃其中部分乘积P {C [i]}超过目标X
的组合集。C[0]^4
的第4次幂后立即停止。通常,编程语言将提供上述算法的部分或全部支持。例如,在python中,您可以延迟列出带有X
构建块的数组的所有排列,因此仅对修剪逻辑进行编码:
itertools