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

配列内の特定の値を検索するC++プログラム


n個のソートされた整数値を含む配列'arr'が与えられたと仮定します。サイズqの配列「query」も指定されており、「query」の値が指定された配列「arr」に存在するかどうかを確認する必要があります。クエリの値がarrに存在する場合は、値が配置されている位置とともに「Present」を出力します。それ以外の場合は、「Not present」を出力し、arrの位置を出力します。ここで、最小値はの値よりも大きくなります。クエリが見つかりました。配列は1つのインデックスが付けられていることを覚えておく必要があります。

したがって、入力がn =8、arr ={1、2、3、4、7、9、12、15}、q =3、query ={1、5、8}のような場合、出力は次のようになります。

Present 1
Not present 5
Not present 6

クエリの最初の値は、arrの位置1にあります。

クエリの2番目の値はarrに存在しません。クエリの値よりも大きい最小値が5になる位置。

同様に、クエリの3番目の値もarrに存在しません。 arrの位置6にある値よりも大きい値。

これを解決するには、次の手順に従います-

  • 配列値を定義する
  • iを初期化する場合:=0、i
  • 値の最後にarr[i]を挿入します
  • iを初期化する場合:=0、i
  • idx:=(query [i]以上の値の最初の要素の位置)-値の最初の要素の位置
  • values[idx]がquery[i]と同じ場合、-
    • print( "Present")
  • それ以外の場合、
    • print( "存在しません")
  • print(idx + 1)
  • 理解を深めるために、次の実装を見てみましょう-

    #include <vector>
    #include <iostream>
    using namespace std;
    
    void solve(int n, int arr[], int q, int query[]) {
       vector<int> values;
       for(int i = 0; i < n; i++){
          values.push_back(arr[i]);
       }
       for(int i = 0; i < q; i++) {
          int idx = lower_bound (values.begin(), values.end(),
          query[i]) - values.begin();
          if (values[idx] == query[i])
             cout << "Present ";
          else
             cout << "Not present ";
          cout << idx + 1 << endl;
       }
    }
    int main() {
       int input_arr[] = {1, 2, 3, 4, 7, 9, 12, 15};
       int query_arr[] = {1, 5, 8};
       solve(8, input_arr, 3, query_arr);
       return 0;
    }

    Input(stdin)

    int input_arr[] = {1, 2, 3, 4, 7, 9, 12, 15};
    int query_arr[] = {1, 5, 8};
    solve(8, input_arr, 3, query_arr);

    出力

    Present 1
    Not present 5
    Not present 6

    1. C++の配列に存在するキーKの確率

      サイズ「n」の配列で与えられ、タスクは、配列で利用可能な場合、与えられた要素kの確率を見つけることです。 配列内の要素の数に等しい「n」まで配列全体をトラバースし、指定された要素またはキー「k」を検索します。要素がその確率を計算するよりも配列に存在する場合は、0を出力します。 入力 arr[] = { 1, 2, 3, 4, 5, 6} K = 5 出力 probability of a key 5 in an array is :0.166 入力 arr[] = { 1,2,3,4,5,6,7 } K = 8 出力 probability of a key 5 in an

    2. C ++プログラムでの二分探索?

      二分探索は、半区間探索、対数探索、または二分探索とも呼ばれ、ソートされた配列内のターゲット値の位置を見つける検索アルゴリズムです。二分探索は、ターゲット値を配列の中央の要素と比較します。それらが等しくない場合、ターゲットが存在できない半分が削除され、残りの半分で検索が続行され、再び中央の要素がターゲット値と比較され、ターゲット値が見つかるまでこれが繰り返されます。残りの半分が空の状態で検索が終了した場合、ターゲットは配列に含まれていません。アイデアは単純ですが、バイナリ検索を正しく実装するには、特に配列の値が範囲内の整数のすべてではない場合、終了条件と中間点の計算に関する微妙な点に注意する必要