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[] เป็นอาร์เรย์แบบวงกลม

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • 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