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

Số chẵn ở chỉ số chẵn và số lẻ ở chỉ số lẻ trong C ++

Trong bài toán này, chúng ta được cung cấp một mảng arr [] có kích thước n gồm n / 2 giá trị chẵn và n / 2 giá trị lẻ. Nhiệm vụ của chúng ta là tạo một chương trình đặt số chẵn ở chỉ số chẵn và số lẻ ở chỉ số lẻ.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào: arr [] ={5, 1, 6, 4, 3, 8}

Đầu ra: arr [] ={6, 1, 5, 4, 3, 8}

Phương pháp tiếp cận giải pháp -

Một giải pháp sẽ là duyệt qua mảng và sau đó tìm số cuối cùng không ở vị trí chẵn và thay thế nó bằng giá trị vị trí tắt tiếp theo. Đây là một giải pháp đầy hứa hẹn nhưng giải pháp có thể được thực hiện hiệu quả hơn bằng cách sử dụng hai chỉ mục một cho chẵn và một cho lẻ. Nếu có một phần tử ở chỉ số chẵn không phải là chẵn và một phần tử lẻ không ở chỉ số lẻ, chúng tôi sẽ hoán đổi chúng nếu không sẽ tăng cả hai chỉ số lên hai.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#include <iostream>
using namespace std;

void O_EReshuffle(int arr[], int n) {
   
   int oIndex = 1;
   int eIndex = 0;
   
   for(int i = 0; i < n; ) {
     
      while (eIndex < n && arr[eIndex] % 2 == 0)
         eIndex += 2;
         
      while (oIndex < n && arr[oIndex] % 2 == 1)
         oIndex += 2;
         
      if (eIndex < n && oIndex < n)
         swap (arr[eIndex], arr[oIndex]);
         
      else
         break;
   }
}

int main()
{
   int arr[] = { 5, 1, 6, 4, 3, 8 };
   int n = sizeof(arr) / sizeof(arr[0]);

   cout << "Array before Reshuffling: ";
   for(int i = 0; i < n ; i++){
      cout<<arr[i]<<"\t";
   }
   O_EReshuffle(arr, n);

   cout<<"\nArray after Reshuffling: ";
   for(int i = 0; i < n ; i++){
      cout<<arr[i]<<"\t";
   };

   return 0;
}

Đầu ra -

Array before Reshuffling: 5 1 6 4 3 8
Array after Reshuffling: 4 1 6 5 8 3