Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 D로 합계의 처음 N개의 자연수 차이에서 가능한 두 세트

<시간/>

이 문제에서 두 개의 정수 N과 D가 주어집니다. 우리의 임무는 D의 차이를 갖는 처음 N개의 자연수 집합에서 집합이 가능한지 여부를 확인하는 것입니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

입력 - N=5 D =3

출력 − 예

설명 -

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

이 문제를 풀기 위해 우리는 몇 가지 수학적 계산을 할 것입니다.

우리는 모든 숫자의 합이 두 집합의 요소의 합이라는 것을 압니다.

n 자연수 공식의 합,

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

두 가지를 모두 추가하면

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

이 조건이 참이면 해결만 가능합니다.

예시

솔루션 구현을 보여주는 프로그램,

#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;
}

출력

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