使用C ++从加密数组(其他元素的和的数组)中找到原始数组。
让我们考虑我们有一个整数数组,该数组是加密数组,假设该数组为A=[10,14,12,13,13,11],原始数组为B=[5,1,3,2,4],我们可以看到A的索引I处的每个元素都遵循以下规则:A[i]=B[j]中位置j处所有元素的总和,其中I≠j。我们的任务是从加密数组中找到一个原始数组。
该任务基于算术观察。假设数组的大小为4,则原始数组B具有四个元素B=[a,b,c,d],因此A将类似于A[b+c+d,a+c+d,a+b+d,a+b+c],如果我们将B的所有元素相加,将得出sum=b+c+d+a+c+d+a+b+d+a+b+c=3*(a+b+c+d)。因此,B的元素之和为sum/3,现在我们看到B的元素为[sum–A[0],sum–A[1],sum–A[2],sum–A[3]]
示例
#include<iostream>
using namespace std;
void showOrigianlArray(int arr[], int n) {
int sum = 0;
for (int i=0; i<n; i++)
sum += arr[i];
sum = sum/(n-1);
for (int i=0; i<n; i++)
cout << (sum - arr[i]) << " ";
}
int main() {
int arr[] = {10, 14, 12, 13, 11};
int n = sizeof(arr) / sizeof(arr[0]);
showOrigianlArray(arr, n);
}输出结果
5 1 3 2 4