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] 除以 10 直到它變為 0 來查詢每個 arr[i] 的最左邊的數字。每次餘數將表示個位上的數字。

  • 如果當前此類數字是最高的,當 num==0 時(表示 rem 具有最左邊的數字),更新 maxx 和 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

更新於: 2020-07-28

650 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.