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

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

Chúng ta được cung cấp các biến N, M, A và B. Mục đích là tìm các cặp số dương có thứ tự (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.

Chúng tôi sẽ duyệt qua bằng cách sử dụng hai vòng lặp cho i và j. Nếu sum (i + j)% A ==0 &&(i + j)% B ==0. Số lượng tăng dần.

Hãy cùng hiểu với các ví dụ.

Đầu vào

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

Đầu ra

Ordered pairs (i,j) where (i+j) is divisible by both A & B: 9

Giải thích

Pairs will be (1,5) (2,4) (2,10) (3,3) (3,9) (4,2) (4,8) (5,1) (5,7). Total pairs is 9.

Đầu vào

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

Đầu ra

Ordered pairs (i,j) where (i+j) is divisible by both A & B: 0

Giải thích

No such pairs possible.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy các số nguyên N, M, A, B.

  • Hàm sumDivible (int n, int m, int a, int b) nhận tất cả các biến và trả về tổng số các cặp có thứ tự với tổng chia hết cho A và B.

  • Lấy số lượng biến ban đầu là 0 cho các cặp.

  • Đảo ngược bằng cách sử dụ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 xem (i + j)% a ==0 hay (i + j)% b ==0.

  • Nếu số gia tăng đúng.

  • Ở cuối tất cả các vòng đếm sẽ có tổng số các cặp như vậy.

  • Trả về kết quả là số lượng.

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 <<"Ordered pairs (i,j) where (i+j) is divisible by both A & B: "<<sumDivisible(N,M,A,B);
   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 -

Ordered pairs (i,j) where (i+j) is divisible by both A & B: 500