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

Độ dài tối đa của mảng con sao cho tổng của mảng con bằng C ++

Chúng tôi được cung cấp với một mảng Arr [] của các số nguyên. Mục đích là tìm mảng con có độ dài dài nhất của Arr [], tổng các phần tử của chúng là chẵn. Nghĩa là, tổng các phần tử của một mảng con là chẵn và mảng con đó có độ dài dài nhất.

Đầu vào - Arr [] ={2,3,5,2,6,7}.

Đầu ra −Độ dài tối đa của mảng con - 4

Giải thích −Mảng con có độ dài tối đa là {5,2,6,7}. Tổng là 20 là số chẵn.

Đầu vào - Arr [] ={5,7,7,3,4}.

Đầu ra - Độ dài tối đa của mảng con - 4

Giải thích - Dải con có độ dài tối đa là {5,7,7,3}. Tổng là 22 là số chẵ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 số nguyên Arr [] được sử dụng để lưu trữ các số nguyên.

  • Kích thước biến được sử dụng để lưu trữ độ dài của mảng.

  • Hàm Length (int arr []) là kiểm tra tổng của mảng có chẵn không. Leng được sử dụng để lưu trữ độ dài của mảng con.

  • Tính tổng toàn bộ mảng, nếu độ dài thậm chí trả về của mảng, n.

  • Bây giờ, bắt đầu từ phần tử đầu tiên, lướt qua toàn bộ mảng, nếu tìm thấy phần tử lẻ thì hãy tìm độ dài của cả hai nửa trừ arr [i].

  • Trả về độ dài tối đa cho độ dài của mảng con.

Ví dụ

#include<iostream<
int Length(int arr[], int n){
   int sum = 0, leng = 0;
   // if whole array is even
   for (int i = 0; i < n; i++)
      sum += arr[i];
   if (sum % 2 == 0) // total sum is already even
      return n;
   // Find an index i such the a[i] is odd
   // and compare length of both halfs excluding
   // a[i] to find max length subarray
   for (int i = 0; i < n; i++) {
      if (arr[i] % 2 == 1)
         leng = i>n-i-1?i:n-i-1;
   }
   return leng;
}
int main(){
   int Arr[] = { 1, 2, 6, 2, 4,2 };
   int size = 6;
   printf("Maximum length of subarray such that sum of the subarray is even: %d",Length(Arr, size));
return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Maximum length of subarray such that sum of the subarray is even : 5