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

C ++の2つの方程式を使用して、繰り返し数と欠落している数を見つけます


この問題では、サイズNの配列arr []が与えられます。これは1からNの範囲の整数値で構成されます。また、範囲内の1つの要素xが欠落していますが、配列内の1つの要素yは二重に発生します。私たちのタスクは、2つの方程式を使用して繰り返し数と欠落数を見つけることです。 。

問題を理解するために例を見てみましょう

入力

arr[] = {1, 2 , 3, 3}

出力

missing = 4, double = 3

ソリューションアプローチ

この問題を解決する方法は、2つの値xとyに対して2つの方程式を使用することです。次に、方程式を解いてxとyの値を取得します。

方程式とその作成方法を見てみましょう。

配列の要素の合計は、最初のN個の自然数の合計で構成され、1つの要素が追加され、1つの要素が欠落しています。

arrSum = Sum(N) - x + y
y - x = arrSum - sum(N)

これは式1です。

それでは、平方和を取りましょう。同様に、

arrSumsq = sqSum(N) - x2 + y2
(y - x)*(y + x) = arrSumSq - sqSum(N)

式1を使用して

x + y = (arrSumSq - sqSum(N)) / (arrSum - sum(N))

得られた両方の方程式を追加します

y = (arrSumSq - sqSum(N)) / (arrSum - sum(N)) + (arrSum - sum(N)) / 2

次に、yの値を使用して、xを使用して見つけます

x = y - (arrSum - sum(N))

の公式があります
sum(N) = n*(n-1)/2
sqSum(N) = n*(n+1)*(2n + 1)/ 6

arrSumは、配列のすべての要素の合計です

arrSumSqは、配列のすべての要素の2乗の合計です。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
void findExtraAndMissingVal(int arr[], int n){
   int sumN = (n * (n + 1)) / 2;
   int sqSumN = (n * (n + 1) * (2 * n + 1)) / 6;
   int arrSum = 0, arrSqSum = 0, i;
   for (i = 0; i < n; i++) {
      arrSum += arr[i];
      arrSqSum += (arr[i]* arr[i]);
   }
   int y = (((arrSqSum - sqSumN) / (arrSum - sumN)) + sumN - arrSum) / 2;
   int x = arrSum - sumN + y;
   cout<<"The missing value from the array is "<<x;
   cout<<"\nThe value that occurs twice in the array is "<<y;
}
int main() {
   int arr[] = { 1, 2, 2, 3, 4 };
   int n = sizeof(arr)/sizeof(arr[0]);
   findExtraAndMissingVal(arr, n);
   return 0;
}

出力

The missing value from the array is 2
The value that occurs twice in the array is 5

  1. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります

  2. C++を使用してサッカーの五角形と六角形の数を見つける

    ご存知のように、五角形と六角形はサッカーの重要な部分です。これらの形状は、完全な球形を形成するためのパズルのように組み合わされます。ですから、ここにサッカーがあり、六角形と五角形を見つける必要があります。 問題を簡単に解決するためにオイラー標数を使用します。オイラー標数は、位相空間の特定の形状または構造を記述するために機能する数値です。したがって、サッカーの五角形と六角形の数を計算するために使用できます。 オイラー標数- chi(S) −比表面積Sの整数 F −顔 G −グラフ V −頂点 E −エッジはSに埋め込まれています。 V - E + F