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

Số phép toán tối thiểu để UCLN mảng thành bội của k trong C++

Cho mảng arr và giá trị k. Cần tìm số phép toán tối thiểu để UCLN của mảng trở thành bội số của k. Phép toán là tăng hoặc giảm giá trị phần tử. Ví dụ: mảng {4, 5, 6}, k = 5. Tăng 4 lên 1, giảm 6 xuống 1, cả hai thành 5. Tổng phép toán = 2.

Các bước:

  • Với mỗi phần tử e trong mảng:
  • Nếu e != 1 và e > k: tăng kết quả thêm min(e % k, k - e % k).
  • Ngược lại: tăng kết quả thêm k - e.
  • Trả về kết quả.

Ví dụ minh họa

#include <iostream>
using namespace std;

int countMinOp(int arr[], int n, int k) {
    int result = 0;
    for (int i = 0; i < n; ++i) {
        if (arr[i] != 1 && arr[i] > k) {
            result = result + min(arr[i] % k, k - arr[i] % k);
        } else {
            result = result + k - arr[i];
        }
    }
    return result;
}

int main() {
    int arr[] = {4, 5, 6};
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 5;
    cout << "So phep toan toi thieu: " << countMinOp(arr, n, k);
    return 0;
}

Kết quả

So phep toan toi thieu: 2