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

C ++で条件演算子を使用せずに、配列から最大の要素を検索します


いくつかの要素を持つ配列Aがあるとします。配列Aで最大の要素を見つける必要がありますが、制約は、条件演算子を使用できないことです。したがって、A =[12、63、32、24、78、56、20]の場合、最大要素は78にな​​ります。

この問題を解決するために、ビット単位のAND演算を使用します。最初に、1つの追加要素INT_MAX(すべてのビットが1)を配列に挿入します。次に、配列から任意のペアの最大AND値を見つけようとします。この取得された最大値には、INT_MAXのAND値と元の配列の最大要素が含まれ、これが結果になります。

#include <iostream>
#include <vector>
using namespace std;
int checkBit(int pattern, vector<int> arr, int n) {
   int count = 0;
   for (int i = 0; i < n; i++)
      if ((pattern & arr[i]) == pattern)
         count++;
   return count;
   }
   int findLargestElement(int arr[], int n) {
      vector<int> elements_vector(arr, arr + n);
      elements_vector.push_back(INT_MAX);
      n++;
      int res = 0;
      for (int bit = 31; bit >= 0; bit--) {
         int count = checkBit(res | (1 << bit), elements_vector, n);
         if ((count | 1) != 1)
               res |= (1 << bit);
      }
      return res;
}
int main() {
   int arr[] = {12, 63, 32, 24, 78, 56, 20};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Largest element is: " << findLargestElement(arr, n);
}

出力

Largest element is: 78

  1. C++の配列内の各要素のSurpasserCountを検索します

    1つの配列Aが与えられたと仮定します。その配列内の各要素の超過者の数を見つける必要があります。超過者は、現在の要素の配列の右側に存在するより大きな要素です。 A ={2、7、5、3、0、8、1}とすると、超過者は{4、1、1、1、2、0、0}であるため、2の右側には4つの数字があります。 4よりも多く、他の人にも同じルールがあります。解決策は非常に単純で、2つのネストされたループがあり、要素ごとに、超過者をカウントして、別の配列に格納します。 例 #include <iostream> using namespace std; void gerSurpassers(int arr[

  2. 配列の最大要素を見つけるためのC++プログラム

    配列には複数の要素が含まれており、配列内の最大の要素は他の要素よりも大きい要素です。 たとえば。 5 1 7 2 4 上記の配列では、7が最大の要素であり、インデックス2にあります。 配列の最大の要素を見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() {    int a[] = {4, 9, 1, 3, 8};    int largest, i, pos;    largest = a[0