Trong bài toán này, chúng ta được cho một mảng số và chúng ta phải tìm giá trị lớn nhất có thể được tạo ra bằng cách thay đổi chúng theo một cách nhất định. Điều kiện để sắp xếp là, thứ tự của các số chẵn và các số lẻ phải giữ nguyên, tức là thứ tự của tất cả các số chẵn không được thay đổi.
hãy lấy một ví dụ để hiểu rõ hơn về khái niệm này,
Input:{17, 80, 99, 27, 14, 22} Output:801799271422Ở đây 99 là số lớn nhất nhưng 17 đứng trước nó theo thứ tự là số lẻ nên chúng ta đã xét 80 trước rồi mới tuần tự lập thứ tự sắp xếp như - 80 17 99 27 14 22
Vì chúng tôi đã hiểu vấn đề, chúng ta hãy cố gắng tạo ra một giải pháp cho vấn đề này. Ở đây, chúng ta không thể đi cho hoặc thứ tự giảm dần cổ điển vì các ràng buộc về chuỗi Chẵn và Lẻ được xác định. Vì vậy, chúng ta sẽ phải duy trì trình tự này và kiểm tra xem phần tử lớn nhất trong số các phần tử đầu tiên của lệnh Chẵn và Lẻ có được chấp nhận hay không. và sau đó đi như vậy. Hãy xem một thuật toán sẽ làm cho điều này rõ ràng hơn.
Thuật toán
Bước 1:Tạo hai cấu trúc, một cho chẵn và lẻ, điều này sẽ duy trì chuỗi.Bước 2:Lấy một phần tử từ mỗi cấu trúc và kiểm tra xem tổ hợp nào tạo thành một số lớn. Ví dụ, nếu E là số chẵn và O là số lẻ ở trên cùng của cấu trúc. sau đó chúng ta sẽ kiểm tra xem cái nào là Lớn hơn của EO và OE. Bước 3:Đặt kết hợp lớn hơn vào dãy cuối cùng. Bước 4:In dãy cuối cùng.Ví dụ
Bây giờ, hãy tạo một chương trình dựa trên thuật toán này.
#includeusing namespace std; string merge (vector arr1, vector arr2) {int n1 =arr1.size (); int n2 =arr2.size (); int i =0, j =0; string to =""; while (i 0) big + =arr1 [i ++]; else big + =arr2 [j ++]; } while (i arr, int n) {vector chẵn, lẻ; for (int i =0; i arr; arr.push_back ("17"); arr.push_back ("80"); arr.push_back ("99"); arr.push_back ("27"); arr.push_back ("14"); arr.push_back ("22"); int n =arr.size (); cout <<"Số lớn nhất có thể từ mảng là =" < Đầu ra
Số lớn nhất có thể từ mảng là =801799271422