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

Đếm cặp (i,j) có tổng chia hết cho cả A và B trong C++


Cho các biến N, M, A và B. Mục tiêu là tìm các cặp có thứ tự của số dương (i, j) sao cho tổng của chúng chia hết cho cả A và B. Và 1 <= i <= N và 1 <= j <= M.

Ta duyệt bằng hai vòng lặp cho i và j. Nếu tổng (i+j)%A==0 && (i+j)%B==0. Tăng count.

Hãy hiểu qua các ví dụ.

Đầu vào

N = 5, M = 10, A = 2, B = 3;

Đầu ra

Cặp có thứ tự (i,j) mà (i+j) chia hết cho A & B: 9

Giải thích

Các cặp: (1,5), (2,4), (2,10), (3,3), (3,9), (4,2), (4,8), (5,1), (5,7). Tổng 9 cặp.

Đầu vào

N = 10, M = 10, A = 10, B = 11;

Đầu ra

Cặp có thứ tự (i,j) mà (i+j) chia hết cho A & B: 0

Giải thích

Không có cặp nào thỏa mãn.

Phương pháp sử dụng trong chương trình dưới đây

  • Nhận số nguyên N, M, A, B.
  • Hàm sumDivisible(int n, int m, int a, int b) nhận tất cả biến và trả về số cặp có thứ tự với tổng chia hết cho A và B.
  • Khởi tạo biến count = 0 cho cặp.
  • Duyệt bằng hai vòng lặp for để tìm i và j.
  • Bắt đầu từ i=1 đến i<=n và j=1 đến j<=m.
  • Kiểm tra nếu (i+j)%a==0 && (i+j)%b==0.
  • Nếu đúng tăng count.
  • Sau tất cả vòng lặp count chứa tổng số cặp như vậy.
  • Trả về count làm kết quả.

Ví dụ

#include <bits/stdc++.h>
using namespace std;

int sumDivisible(int n, int m, int a, int b) {
    int count = 0;
    for (int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            if((i+j)%a==0 && (i+j)%b==0) {
                count++;
            }
        }
    }
    return count;
}

int main() {
    int N = 50, M = 100, A = 5, B = 10;
    cout << "Cặp có thứ tự (i,j) mà (i+j) chia hết cho A & B: " << sumDivisible(N, M, A, B);
    return 0;
}

Đầu ra

Nếu chạy mã trên sẽ cho kết quả sau:

Cặp có thứ tự (i,j) mà (i+j) chia hết cho A & B: 500