在 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP