从前 NN 个自然数中可能的两组数字和差为 DD,用 C++ 编程
在这个问题中,我们有两个整数 N 和 D。我们的任务是检查是否可以从前 NN 个自然数集合中得到两组数字之差为 D。
我们举个例子来理解这个问题,
输入 − 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
广告