C++で合計Nを使用して連続する数値の可能なすべての合計を出力します
この問題では、正の整数Nが与えられ、合計がNに等しいすべての可能な連続数のシーケンスを出力する必要があります。
問題を理解するために例を見てみましょう
Input: N = 15 Output: 1 2 3 4 5 7 8
この問題の簡単な解決策は、N/2までの連続したシーケンスの組み合わせを合計することです。次に、合計がNになるシーケンスを出力します。
#include<iostream> using namespace std; void printConsequtiveSum(int N){ int start = 1, end = (N+1)/2; while (start < end){ int sum = 0; for (int i = start; i <= end; i++){ sum = sum + i; if (sum == N){ for (int j = start; j <= i; j++) cout<<j<<" "; cout<<endl; break; } if (sum > N) break; } sum = 0; start++; } } int main(){ int N = 25; cout<<"Sequence of consicutive numbers that sum upto "<<N<<" are :\n"; printConsequtiveSum(N); return 0; }
出力
合計25までの連続番号のシーケンスは-
です。3 4 5 6 7 12 13
この方法は簡単ですが、それほど効率的ではありません。
したがって、合計を追跡するために事前に計算された合計の配列を使用する、より複雑ですが最適なソリューションがあります。これにより、合計の複雑さが軽減されます。
#include <iostream> using namespace std; void printConsequtiveSum(int N){ int start = 1, end = 1; int sum = 1; while (start <= N/2){ if (sum < N){ end += 1; sum += end; } else if (sum > N){ sum -= start; start += 1; } else if (sum == N){ for (int i = start; i <= end; ++i) cout<<i<<" "; cout<<endl; sum -= start; start += 1; } } } int main(){ int N = 25; cout<<"Sequence of consicutive numbers that sum upto "<<N<<" are:\n"; printConsequtiveSum(N); return 0; }
出力
合計が25になる連続番号のシーケンスは-
です。3 4 5 6 7 12 13
-
C++で指定された合計ですべてのトリプレットを印刷します
この問題では、一意の整数の配列と合計が与えられます。そして、同じ合計を形成できるトリプレットを見つける必要があります。 問題を解決するために例を見てみましょう- Input : array = {0 , 2 , -1 , 1, -2} Sum = 1 Output : 1 2 -2 0 2 -1 この問題を解決するために、合計を提供するすべてのトリプレットを見つけます。簡単なアプローチは、3つのループを使用して要素の合計を見つけ、適切なトリプレットを返すことです。 例 #include <iostream> using namespace std; void Triplets(
-
C++で指定された合計ですべてのペアを印刷します
この問題では、整数の配列と整数の合計が与えられ、合計が合計値に等しい整数のすべてのペアを出力する必要があります。 問題を理解するために例を見てみましょう: 入力- 配列={1、6、-2、3}合計=4 出力- (1、3)、(6、-2) ここでは、指定された合計値のペアが必要です。 問題の簡単な解決策は、合計を生成する要素のペアをチェックすることです。これは、配列をトラバースして、合計値となる配列内の数値を見つけることで実行できます。 例 このプログラムは解決策を説明します- #include <iostream> using namespace std; int prin