C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のDとしての合計の最初のN個の自然数の差から可能な2つのセット


この問題では、2つの整数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

この問題を解決するために、いくつかの数学的計算があります。

すべての数の合計は、2つのセットの要素の合計です。

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

  1. 最初のn個の自然数の二乗和のためのC++プログラム?

    この問題では、最初のn個の自然数の2乗の合計を取得する方法を確認します。ここでは、1からnまで実行されるforループを使用しています。各ステップで、項の2乗を計算し、それを合計に追加します。このプログラムは、完了するまでにO(n)時間かかります。しかし、これをO(1)または一定時間で解きたい場合は、この級数式-を使用できます。 アルゴリズム squareNNatural(n) begin    sum := 0    for i in range 1 to n, do       sum := sum + i^2 &

  2. Pythonの最初のn個の自然数の順列から魔法のセットの数を見つけるプログラム

    最初のn個の自然数を持つ配列Aと、配列Aの1つの順列P {p1、p2、...pn}があるとします。魔法の集合がいくつあるかを確認する必要があります。これがこれらのいくつかのルールを満たす場合、順列は魔法のセットであると言われます- P [a [i]]