在 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
广告