Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Tích max mảng 1 và min mảng 2 trong C

Cho 2 mảng arr1[], arr2[]. Tính tích: max(arr1) × min(arr2).

Ví dụ

Đầu vào - arr1={6,2,5,4,1}, arr2={3,7,5,9,6}

Đầu ra - 18 (6 × 3)

Đầu vào - arr1={2,3,9,11,1}, arr2={5,4,2,6,9}

Đầu ra - 22 (11 × 2)

Phương pháp

  • Sắp xếp cả 2 mảng tăng dần
  • Max arr1 = phần tử cuối, Min arr2 = phần tử đầu
  • Nhân 2 giá trị này

Chương trình mẫu

#include <stdio.h>

void sortArr(int arr[], int n) {
    for (int i = 0; i < n-1; i++)
        for (int j = i+1; j < n; j++)
            if (arr[i] > arr[j]) {
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
}

int minMaxProduct(int arr1[], int arr2[], int n1, int n2) {
    sortArr(arr1, n1);
    sortArr(arr2, n2);
    return arr1[n1-1] * arr2[0];
}

int main() {
    int arr1[] = {2, 3, 9, 11, 1};
    int arr2[] = {5, 4, 2, 6, 9};
    int n1 = sizeof(arr1)/sizeof(arr1[0]);
    int n2 = sizeof(arr2)/sizeof(arr2[0]);
    printf("%d\n", minMaxProduct(arr1, arr2, n1, n2));
    return 0;
}

Kết quả

22

Tối ưu: Có thể tìm max/min O(n) không cần sắp xếp O(n log n).