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

C++でarr[i]=iとなるように配列を再配置します


正の整数型の配列、たとえば、配列内の要素の値が0より大きく、配列のサイズよりも小さい任意のサイズのarr[]が与えられます。タスクは、arr[i]が'i'の場合、'i'が配列に存在する場合、それ以外の場合はarr [i]要素に値-1を設定し、最終値を出力するように配列を再配置することです。結果。

このためのさまざまな入出力シナリオを見てみましょう-

入力 − int arr [] ={0、8、1、5、4、3、2、9}

出力 − arr [i]=iとなるような配列の再配置は次のとおりです。0123 4 5 -1 -1

説明 −サイズ8の整数配列と、8未満の配列値のすべての要素が与えられます。次に、配列を再配置します。つまり、

arr[0] = 0(present in an array)
arr[1] = 1(present in an array)
arr[2] = 2(present in an array)
arr[3] = 3(present in an array)
arr[4] = 4(present in an array)
arr[5] = 5(present in an array)
arr[6] = -1(NOT present in an array)
arr[7] = -1(NOT present in an array)

入力 − int arr [] ={1、2、6、9、10}

出力 − arr [i]=iとなるような配列の再配置は次のとおりです。-112 -1 -1

説明 −サイズ5の整数配列と、5未満の配列値のすべての要素が与えられます。次に、配列を再配置します。つまり、

arr[0] = -1(NOT present in an array)
arr[1] = 1(present in an array)
arr[2] = 2(present in an array)
arr[3] = -1(NOT present in an array)
arr[4] = -1(NOT present in an array)

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数型要素の配列を入力し、配列のサイズを計算します。

  • 配置する前に配列を印刷し、関数Rearranging(arr、size)

    を呼び出します。
  • 関数Rearing(arr、size)の内部

    • 整数型変数を宣言します。たとえば、ptr

    • iがサイズより小さくなるまでiから0までループFORを開始します。ループ内で、jがサイズより小さくなるまでjから0までの別のループFORを開始します。

    • ループ内で、IF arr [j] =iを確認してから、ptr =arr [j]、arr[j]をarr[i]に設定し、arr[i]をptrに設定して中断します。

    • iからiがサイズ未満になるまでループFORを開始します。ループ内で、IF arr [i]!=iを確認してから、arr[i]を-1に設定します。

  • 配列の値を再配置した後、配列を出力します。

#include <iostream>
using namespace std;
void Rearranging(int arr[], int size){
   int ptr;
   for(int i = 0; i < size; i++){
      for(int j = 0; j < size; j++){
         if(arr[j] == i){
            ptr = arr[j];
            arr[j] = arr[i];
            arr[i] = ptr;
            break;
         }
      }
   }
   for(int i = 0; i < size; i++){
      if(arr[i] != i){
         arr[i] = -1;
      }
   }
}
int main(){
   int arr[] = {0, 8, 1, 5, 4, 3, 2, 9 };
   int size = sizeof(arr) / sizeof(arr[0]);
   //calling the function to rearrange an array such that arr[i] = i
   Rearranging(arr, size);
   //Printing the array
   cout<<"Rearrangement of an array such that arr[i] = i is: ";
   for(int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
}

出力

上記のコードを実行すると、次の出力が生成されます

Rearrangement of an array such that arr[i] = i is: 0 1 2 3 4 5 -1 -1

  1. C ++で(x%k)*(x / k)==nとなるような最小のxを見つけます

    2つの正の整数nとkが与えられ、(x%k)*(x / k)がnと同じになるように、正の整数xを見つける必要があります。したがって、nとkがそれぞれ4と6の場合、出力は10になります。したがって、(10%6)*(10/6)=4です。 x%kの値は[1からk – 1]の範囲にあることがわかっているので(0は含まれません)ここで、nを除算する範囲で可能な整数を見つけるため、与えられた方程式は次のようになります。 * k)/(x%k)+(x%k) 例 #include<iostream> using namespace std; int minValue(int x, int y){ &

  2. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;