C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のN個の数値によって形成されるN/2ペアの合計の2乗の合計を最小化します


問題の説明

n個の要素の配列が与えられます。タスクは、n/2ペアの二乗和が最小になるようにn/2ペアを作成することです。

与えられた配列が-

の場合
arr[] = {5, 10, 7, 4}
then minimum sum of squares is 340 if we create pairs as (4, 10) and ( 5, 7)

アルゴリズム

1. Sort the array
2. Take two variables which point to start and end index of an array
3. Calulate sum as follows:
   sum = arr[start] + arr[end];
   sum = sum * sum;
4. Repeate this procedure till start < end and increment minSum as follows:
   While (start < end) {
      sum = arr[start] + arr[end];
      sum = sum * sum;
      minSum += sum;
      ++start;
      --end;
   }

#include <iostream>
#include <algorithm>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
int getMinSquareSum(int *arr, int n) {
   sort(arr, arr + n);
   int minSum = 0;
   int start = 0;
   int end = n - 1;
   while (start < end) {
      int sum = arr[start] + arr[end];
      sum *= sum;
      minSum += sum;
      ++start;
      --end;
   }
   return minSum;
}
int main() {
   int arr[] = {5, 10, 7, 4};
   int res = getMinSquareSum(arr, SIZE(arr));
   cout << "Minimum square sum: " << res << "\n";
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Minimum square sum: 340

  1. 最初のn個の自然数の二乗和のためのC++プログラム?

    この問題では、最初のn個の自然数の2乗の合計を取得する方法を確認します。ここでは、1からnまで実行されるforループを使用しています。各ステップで、項の2乗を計算し、それを合計に追加します。このプログラムは、完了するまでにO(n)時間かかります。しかし、これをO(1)または一定時間で解きたい場合は、この級数式-を使用できます。 アルゴリズム squareNNatural(n) begin    sum := 0    for i in range 1 to n, do       sum := sum + i^2 &

  2. シリーズ1/1の合計を見つけるPythonプログラム! + 2/2! + 3/3! + 4/4! +……。+n/ n!

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 −整数入力nが与えられた場合、級数1/1の合計を見つける必要があります。 + 2/2! + 3/3! + 4/4! +……。+n/ n! ここではforループを実装しているため、時間計算量としてO(n)を取得します。 ここで効率を達成するために、同じループ内で階乗を計算します。 ここでは、以下に説明するようにsumofseries関数をフレーム化します- 例 def sumOfSeries(num):    res = 0    fact =