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

C++で自然数からいくつかの整数を削除した後のK番目に小さい要素


このチュートリアルでは、自然数からいくつかの整数を削除した後、最小の要素を見つけるプログラムを作成します。

要素の配列とk値を指定しました。指定された配列に存在する自然数からすべての要素を削除します。そして、残りの自然数からk番目に小さい数を見つけます。

問題を解決するための手順を見てみましょう。

  • 配列とkを初期化します。
  • 配列を初期化し、指定された配列に存在する要素を除くすべての要素を0で初期化します。
  • 指定された配列のサイズになるまで繰り返すループを記述します。
    • 現在の要素が上記の配列に存在しない場合は、kの値をデクリメントします。
    • kがゼロになったときに現在の値を返します。
  • 0を返します。

コードを見てみましょう。

#include <bits/stdc++.h>
#define MAX 1000000
using namespace std;
int smallestNumber(int arr[], int n, int k) {
   int flag[MAX];
   memset(flag, 0, sizeof flag);
   for (int i = 0; i < n; i++) {
      flag[arr[i]] = 1;
   }
   for (int i = 1; i < MAX; i++) {
      if (flag[i] != 1) {
         k--;
      }
      if (!k) {
         return i;
      }
   }
   return 0;
}
int main() {
   int k = 2;
   int arr[] = { 3, 5 };
   cout << smallestNumber(arr, 2, k) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

2

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C++でM回連結された配列からK番目の最小要素を見つけます

    配列Aと、さらに2つの整数KとMがあるとします。配列をそれ自体にM回連結した後、K番目の最小要素を見つける必要があります。配列がA=[3、1、2]、K =4、M =3のようであるとすると、Aを3回連結すると、[3、1、2、3、1、2、3、1 、2]、4番目に小さい要素はここでは2です。 この問題を解決するために、配列Aを並べ替えてから、配列のインデックス((K – 1)/ M)にある値を返します。 例 #include<iostream> #include<algorithm> using namespace std; int findKSmallestNumber(

  2. インデックスによってC++std ::vector <>から要素を削除しますか?

    C ++ std ::vector <>から要素をインデックスで削除するには、次の方法で実行できます- 例 #include<iostream> #include<vector> using namespace std; int main() {    vector<int> v; //declare vector    //insert elements into vector    v.push_back(-10);    v.push_back(7);   &nb