通过连接 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。每次余数将代表单位位置的数字。

  • 如果当前这样的数字是最高的,当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; //具有最高最左边数字的数字索引
   for (int i = 0; i < n; i++) {
      int num = arr[i];
      // 检查最后一位数字
      while (num!=0) {
         int rem = num % 10;
         num = num / 10;
         if (num == 0) {
            if (maxx < rem) {
               maxx = rem;
               pos = i;
            }
         }
      }
   }
   // 打印最大的数字
   cout<<"串联的最大数: ";
   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;
}
输出结果
串联的最大数: 98123456