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

C++の配列のローテーションですべての要素を連結することによる最大数


数字の循環配列が与えられます。循環配列は、最初の要素が最後の要素のすぐ隣として扱われるように要素が配置された配列です。これらはキューを実装するために使用されます。

各要素の桁数は同じまたは異なります。目標は、必要に応じて要素の回転を使用して、数値を連結することにより、可能な限り最大の数値を作成することです。これを行うには、すべての要素の左端のすべての数字の中から左端の一番上の数字を見つけます。一番左端の数字が最初になります。

  • 最初の位置にある場合、インデックス1からn-1のすべての番号がそのまま配置されます。

  • 中間にあり、インデックスがiの場合、インデックスi + 1からn-1のすべてが最初に追加され、次にインデックス0からi-1のインデックスが追加されます。

  • それが最後のものである場合、インデックス0からi-1のすべてがその後に追加されます。

入力

Arr[] = { 121, 43, 65, 32 }

出力

Highest number: 653212143

説明 −左端の最上位桁は6です。最初の位置に65を配置し、次に32、次に121,43を配置します。 Arr[]は循環配列であるため。

入力

Arr[] = { 1101, 9, 321, 77 }

出力

Highest number: 9321771101

説明 −左端の最上位桁は9321771101です。最初の位置に9を配置し、次に321を配置し、次に77、1101を配置します。Arr[]は円形配列であるため。

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

  • 配列arr[]は数値を格納します。

  • 関数Largets(int arr []、int n)は、配列とその長さnを入力として受け取り、作成できる最大の数値を出力します。

  • 変数maxxは、0で初期化された、一番左の桁の数値を格納するために使用されます。

  • Posは、maxxのインデックスを格納するために使用されます。

  • i =0からnまで、各arr [i]の左端の桁を、0になるまで10で割って求めます。毎回、余りは単位の位置の桁を表します。

  • 現在のそのような桁が最も高い場合、num ==0のとき(remが左端の桁を持っていることを意味します)、updatemaxxおよびpos。

  • 要素をインデックスposから配列の最後まで出力し、次にインデックス0からpos-1まで出力します。

#include <bits/stdc++.h>
using namespace std;
void Largest(int arr[], int n){
   int maxx = 0;
   int pos = 0; //index of number with highest leftmost digit
   for (int i = 0; i < n; i++) {
      int num = arr[i];
      // check for the last digit
      while (num!=0) {
         int rem = num % 10;
         num = num / 10;
         if (num == 0) {
            if (maxx < rem) {
               maxx = rem;
               pos = i;
            }
         }
      }
   }
   // print the largest number
   cout<<"Largest number by concatenation: ";
   for (int i = pos; i < n; i++)
      cout << arr[i];
   for (int i = 0; i < pos; i++)
      cout << arr[i];
}
int main(){
   int Arr[] = { 12,34,56,98 };
   int size=4;
   Largest(Arr,size);
   return 0;
}

出力

Largest number by concatenation: 98123456

  1. C++の配列内のすべての要素に最も近い値を検索します

    ここでは、配列内のすべての要素に最も近い値を見つける方法を説明します。要素xに、それよりも大きい次の要素があり、配列にも存在する場合、それはその要素のより大きな値になります。要素が存在しない場合は、-1を返します。配列要素が[10、5、11、6、20、12]であるとすると、大きい方の要素は[11、6、12、10、-1、20]になります。 20は配列内でそれ以上の値を持たないため、-1を出力します。 これを解決するために、C++STLのセットを使用します。セットは、バイナリツリーアプローチを使用して実装されます。二分木では、常に順序の後続が次に大きい要素です。したがって、O(log n)時間で

  2. C++の配列内のすべての要素に最も近い大きい値を検索します

    ここでは、配列内のすべての要素に最も近い大きい値を見つける方法を説明します。要素xに、それよりも大きい次の要素があり、配列にも存在する場合、それはその要素のより大きな値になります。要素が存在しない場合は、-1を返します。配列要素が[10、5、11、6、20、12]であるとすると、大きい方の要素は[11、6、12、10、-1、20]になります。 20は配列内でそれ以上の値を持たないため、-1を出力します。 これを解決するために、C++STLのセットを使用します。セットは、バイナリツリーアプローチを使用して実装されます。二分木では、常に順序の後続が次に大きい要素です。したがって、O(log n)