给定一个数字n,打印序列中大于或等于n的第一个数字

Given a number n, print the first number of the series greater than or equal to n

本文关键字:数字 大于 第一个 一个 打印      更新时间:2023-10-16

我正试图找到一种有效的方法,在给定数字n的情况下,打印以下系列中大于或等于n的第一个数字:

0,0+1,0+1+2,0+1+2+3,0+1+2+3+4,…=0、1、3、6、10

例如,2将返回3,7(或8,或9)将返回10。

肯定有一个聪明的方法可以解决它…你能帮我吗?提前感谢!

以下代码返回了正确的解决方案,但它对这个问题的效率不够:

#include <iostream>
using namespace std;
int main(){
int n;
while(cin >> n){
int m = 0;
for(int i = 1;m < n; ++i){
m = m + i;
}
cout << m << endl;
}
}

您正在描述三角数!

y = (x*(x + 1)) / 2;

要得到给定y的序列中的下一个数字,可以求解x

x = ceil((sqrt(1+8y)-1)/2);

然后把x放回第一个公式中,得到你的答案!

这对大数字来说是一个很好的方法,但对小数字来说可能不理想

基本上,您想为算术级数(AP)编写程序,即第一个n数字的总和

int main(){
int n;
while(cin >> n){
int m = (n * (n + 1)) / 2;
cout << m << endl;
}
}