给定一个由N个整数组成的数组arr[]
,任务是从给定数组中找到所有可能的对的和。
请注意
(arr[i], arr[i])
也被视为有效对。(arr[i], arr[j])
和(arr[j], arr[i])
被认为是两个不同的对。示例:
输入:arr[] = {1, 2}
输出:12
所有有效对都是(1, 1)
,(1, 2)
,(2, 1)
和(2, 2)
。
1 + 1 + 1 + 2 + 2 + 1 + 2 + 2 = 12
答案 0 :(得分:0)
最简单的
int sum = 0;
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
sum += yourarray[i] + yourarray[j];
}
}
优化:
int sum = 0;
int i, j;
for (i = 0; i < n; i++) {
for (j = i; j < n; j++) {
sum += ((i == j) ? 1 : 2) * yourarray[i] + yourarray[j];
}
}
在这里,我们使用加法是可交换的这一事实,并且知道除了一个项目与自身配对之外,我们需要将每对加两次。