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

Có thể có hai bộ từ N số tự nhiên đầu tiên chênh lệch tổng là D trong C ++

Trong bài toán này, chúng ta được cung cấp hai số nguyên N và D. Nhiệm vụ của chúng ta là kiểm tra xem có thể có các bộ từ tập N số tự nhiên đầu tiên có khác biệt là D. hay không.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào - N =5 D =3

Đầu ra - Có

Giải thích -

Out of 1, 2, 3, 4, 5.
We can have two sets set1= {1, 2, 3} and set2 = {4, 5}, this will give difference 3.
{4+5} - {1+2+3} = 9- 6 = 3

Để giải quyết vấn đề này, chúng ta sẽ thực hiện một số phép tính toán học.

Ta biết, tổng của tất cả các số là tổng các phần tử của hai tập hợp là,

Tổng của n công thức số tự nhiên,

sum(s1) + sum(s2) = (n*(n+1))/2. Given in the problem, sum(s1) - sum(s2) = D

Thêm cả hai, chúng tôi nhận được,

2*sum(s1) = ((n*(n+1))/2) + D

Nếu điều kiện này là đúng, thì chỉ có một giải pháp là có thể.

Ví dụ

Chương trình cho thấy việc triển khai giải pháp của chúng tôi,

#include <iostream>
using namespace std;
bool isSetPossible(int N, int D) {
   int set = (N * (N + 1)) / 2 + D;
   return (set % 2 == 0);
}
int main() {
   int N = 10;
   int D = 7;
   cout<<"Creating two set from first "<<N<<" natural number with difference "<<D<<" is ";
   isSetPossible(N, D)?cout<<"possible":cout<<"not possible";
   return 0;
}

Đầu ra

Creating two set from first 10 natural number with difference 7 is possible