使用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