Computer >> Máy Tính >  >> Lập trình >> C ++

Số lượng tối đa bằng cách nối mọi phần tử trong một vòng quay của một mảng trong C ++

Chúng ta được cung cấp một dãy số tròn. Mảng tròn là mảng trong đó các phần tử được sắp xếp sao cho phần tử đầu tiên được coi là bên cạnh phần tử cuối cùng. Đây là những hàng đợi vệ sinh đã sử dụng.

Mỗi phần tử có số chữ số giống nhau hoặc khác nhau. Mục đích là tạo ra số cao nhất có thể phân chia bằng cách nối các số, sử dụng xoay vòng các phần tử nếu được yêu cầu. Chúng tôi sẽ thực hiện việc này bằng cách tìm chữ số ngoài cùng bên trái cao nhất trong số tất cả các chữ số ngoài cùng bên trái của tất cả các phần tử. Số có chữ số ngoài cùng bên trái cao nhất sẽ chiếm vị trí đầu tiên.

  • Nếu nó ở vị trí đầu tiên, tất cả các số từ chỉ mục 1 đến n-1 đều được đặt như cũ.

  • Nếu nó nằm ở đâu đó giữa và chỉ mục của nó là i, tất cả ở các chỉ mục i + 1 đến n-1 sẽ được nối thêm vào trước tiên là những thứ ở các chỉ mục từ 0 đến i-1.

  • Nếu nó là cái cuối cùng, thì tất cả ở các chỉ mục từ 0 đến i-1 đều được thêm vào sau nó.

Đầu vào

Arr[] = { 121, 43, 65, 32 }

Đầu ra

Highest number: 653212143

Giải thích - Chữ số cao nhất ngoài cùng bên trái là 6. Xếp 65 ở vị trí đầu tiên, tiếp theo là 32, sau đó là 121,43. Vì Arr [] là một mảng tròn.

Đầu vào

Arr[] = { 1101, 9, 321, 77 }

Đầu ra

Highest number: 9321771101

Giải thích - Chữ số cao nhất ngoài cùng bên trái là 9321771101. Đặt 9 ở vị trí đầu tiên, tiếp theo là 321, sau đó là 77, 1101. Vì Arr [] là một mảng tròn.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Mảng arr [] lưu trữ các số.

  • Hàm Largets (int arr [], int n) nhận mảng và độ dài n của nó làm đầu vào và in ra số cao nhất có thể được thực hiện ..

  • Biến maxx được sử dụng để lưu trữ số có chữ số cao nhất bên trái, được khởi tạo bằng 0.

  • Pos được sử dụng để lưu trữ chỉ mục của maxx.

  • Bắt đầu từ i =0 đến n, tìm chữ số tận cùng bên trái của mỗi arr [i] bằng cách chia nó cho 10 cho đến khi bằng 0. Mỗi lần số dư sẽ đại diện cho chữ số ở vị trí hàng đơn vị.

  • Nếu chữ số hiện tại như vậy là cao nhất, khi num ==0, (nghĩa là rem có chữ số ngoài cùng bên trái), thì updatemaxx và pos.

  • In các phần tử từ vị trí chỉ mục đến cuối mảng và sau đó in lại từ chỉ mục 0 đến vị trí 1.

Ví dụ

#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;
}

Đầu ra

Largest number by concatenation: 98123456