📜  从它的对和数组构造一个数组

📅  最后修改于: 2021-10-23 07:50:24             🧑  作者: Mango

给定一个对和数组和原始数组的大小 (n),构造原始数组。
数组的对和数组是包含有序形式的所有对的总和的数组。例如,arr[] = {6, 8, 3, 4} 的对和数组是 {14, 9, 10, 11, 12, 7}。
一般来说,arr[0..n-1] 的对和数组是 {arr[0]+arr[1], arr[0]+arr[2], ……., arr[1]+arr[ 2], arr[1]+arr[3], ……., arr[2]+arr[3], arr[2]+arr[4], …., arr[n-2]+arr[n -1}。
“给定一个对和数组,构造原始数组。”
我们强烈建议您将浏览器最小化并亲自尝试。
让给定的数组为“pair[]”,并让原始数组中有 n 个元素。如果我们看几个例子,我们可以观察到 arr[0] 是 pair[0] + pair[1] – pair[n-1] 的一半。注意pair[0] + pair[1] – pair[n-1]的值是(arr[0] + arr[1]) + (arr[0] + arr[2]) – (arr[1] ] + arr[2])。
一旦我们评估了 arr[0],我们可以通过减去 arr[0] 来评估其他元素。例如,可以通过从pair[0] 中减去arr[0] 来评估arr[1],可以通过从pair[1] 中减去arr[0] 来评估arr[2]。
下面是上述想法的实现。

C++
#include 
using namespace std;
 
// Fills element in arr[] from its pair sum array pair[].
// n is size of arr[]
void constructArr(int arr[], int pair[], int n)
{
    arr[0] = (pair[0]+pair[1]-pair[n-1]) / 2;
    for (int i=1; i


Java
import java.io.*;
 
class PairSum {
     
    // Fills element in arr[] from its pair sum array pair[].
    // n is size of arr[]
    static void constructArr(int arr[], int pair[], int n)
    {
        arr[0] = (pair[0]+pair[1]-pair[n-1]) / 2;
        for (int i=1; i


Python3
# Fills element in arr[] from its
# pair sum array pair[].
# n is size of arr[]
 
def constructArr(arr,pair,n):
    arr [0] = (pair[0]+pair[1]-pair[n-1])//2
    for i in range(1,n):
        arr[i] = pair[i-1]-arr[0]
 
# Driver code
if __name__=='__main__':
    pair = [15, 13, 11, 10, 12, 10, 9, 8, 7, 5]
    n =5
    arr = [0]*n
    constructArr(arr,pair,n)
    for i in range(n):
        print(arr[i],end =" ")
 
# This code is contributed by
# Shrikant13


C#
// C# program to construct an
// array from its pair-sum array
using System;
 
class PairSum
{
    // Fills element in arr[] from its
    // pair sum array pair[].
    // n is size of arr[]
    static void constructArr(int []arr, int []pair,
                                             int n)
    {
        arr[0] = (pair[0] + pair[1] - pair[n - 1]) / 2;
        for (int i = 1; i < n; i++)
            arr[i] = pair[i - 1] - arr[0];
    }
     
    // Driver program to test above function
    public static void Main()
    {
        int []pair = {15, 13, 11, 10, 12,
                         10, 9, 8, 7, 5};
        int n = 5;
        int []arr = new int[n];
        constructArr(arr, pair, n);
        for (int i = 0; i < n; i++)
            Console.Write(arr[i] + " ");    
    }
}
 
// This code is contributed by nitin mittal


PHP


Javascript


输出:

8 7 5 3 2