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

C++の等差数列で不足している数を見つけます


等差数列の要素を順番に表す配列があるとします。 1つの要素が欠落しています。不足している要素を見つける必要があります。したがって、arr =[2、4、8、10、12、14]の場合、6が欠落しているため、出力は6になります。

二分探索を使用して、この問題を解決できます。真ん中の要素に移動し、真ん中と真ん中の隣の違いがdiffと同じかどうかを確認します。そうでない場合は、インデックスmidとmid+1の間に欠落している要素が存在します。真ん中の要素がAPのn/2番目の要素である場合、欠落している要素は右半分にあり、そうでない場合は左半分にあります。

#include <iostream>
using namespace std;
class Progression {
   public:
   int missingUtil(int arr[], int left, int right, int diff) {
      if (right <= left)
         return INT_MAX;
      int mid = left + (right - left) / 2;
      if (arr[mid + 1] - arr[mid] != diff)
         return (arr[mid] + diff);
      if (mid > 0 && arr[mid] - arr[mid - 1] != diff)
         return (arr[mid - 1] + diff);
      if (arr[mid] == arr[0] + mid * diff)
         return missingUtil(arr, mid + 1, right, diff);
         return missingUtil(arr, left, mid - 1, diff);
   }
   int missingElement(int arr[], int n) {
      int diff = (arr[n - 1] - arr[0]) / n;
      return missingUtil(arr, 0, n - 1, diff);
   }
};
int main() {
   Progression pg;
   int arr[] = {2, 4, 8, 10, 12, 14};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "The missing element is: " << pg.missingElement(arr, n);
}

出力

The missing element is: 6

  1. C ++を使用して、配列内の数値の頻度を見つけます。

    配列があるとします。 n個の異なる要素があります。配列内の1つの要素の頻度を確認する必要があります。 A =[5、12、26、5、3、4、15、5、8、4]とすると、5の頻度を見つけようとすると、3になります。 これを解決するために、左から配列をスキャンします。要素が指定された数と同じである場合は、カウンターを増やします。それ以外の場合は、配列がなくなるまで次の要素に進みます。 例 #include<iostream> using namespace std; int countElementInArr(int arr[], int n, int e) {   &nbs

  2. C++での算術数

    算術数は、すべての正の除数の平均が整数である数です。つまり、除数の数が除数の合計を除算できる場合、nは算術数です。 概念をよりよく理解するために例を見てみましょう。 Input : n = 6 Output : YES Explanation : Divisors are 1 , 2 , 3 , 6 Sum = 1+2+3+6 = 12 Number of divisors = 4 Sum of divisors / number of divisor = 12 / 4 = 3 アルゴリズム Step 1 : Calculate the sum of divisors and store i