通过连接 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(intarr[],intn)将数组及其长度n作为输入,并打印出可以生成的最大数字。
变量maxx用于存储最左边数字最高的数字,初始化为0。
Pos用于存储maxx的索引。
从i=0到n找到每个arr[i]最左边的数字,通过将其除以10直到它变为0。每次余数将代表单位位置的数字。
如果当前这样的数字是最高的,当num==0时,(表示rem有最左边的数字),更新maxx和pos。
打印从索引pos到数组末尾的元素,然后再次从索引0打印到pos-1。
示例
#include输出结果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