เราได้รับอาร์เรย์ของตัวเลขแบบวงกลม อาร์เรย์แบบวงกลมเป็นอาร์เรย์ที่องค์ประกอบถูกจัดเรียงเพื่อให้องค์ประกอบแรกได้รับการปฏิบัติเหมือนกับองค์ประกอบสุดท้าย สิ่งเหล่านี้ถูกใช้เพื่อปรับใช้คิว
แต่ละองค์ประกอบมีจำนวนหลักเท่ากันหรือต่างกัน เป้าหมายคือการสร้างจำนวนสูงสุดที่เป็นไปได้โดยการต่อตัวเลขโดยใช้การหมุนขององค์ประกอบหากจำเป็น เราจะทำสิ่งนี้โดยค้นหาหลักซ้ายสุดจากหลักซ้ายสุดขององค์ประกอบทั้งหมด ตัวเลขที่มีหลักซ้ายสุดจะอยู่อันดับแรก
-
หากอยู่ที่ตำแหน่งแรก ตัวเลขทั้งหมดที่ดัชนี 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[] เป็นอาร์เรย์แบบวงกลม
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
Array arr[] เก็บตัวเลข
-
ฟังก์ชั่น Largets(int arr[],int n) รับอาร์เรย์และความยาว n เป็นอินพุตและพิมพ์ตัวเลขสูงสุดที่สามารถทำได้ ..
-
maxx ตัวแปรใช้เพื่อเก็บตัวเลขที่มีหลักซ้ายสุดสูงสุด โดยเริ่มด้วย 0
-
Pos ใช้สำหรับเก็บดัชนีของ maxx
-
เริ่มจาก i=0 ถึง n ค้นหาหลักซ้ายสุดของแต่ละ arr[i] โดยการหารด้วย 10 จนกลายเป็น 0 แต่ละครั้งเศษที่เหลือจะแสดงหลักที่ตำแหน่งหน่วย
-
หากตัวเลขปัจจุบันสูงที่สุด เมื่อ 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