在给定数字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;
}
}
答案 0 :(得分:2)
您正在描述三角数!
y = (x*(x + 1)) / 2;
要获得给定y的序列中的下一个数字,可以求解x
x = ceil((sqrt(1+8y)-1)/2);
然后将x返回第一个公式以得到答案!
这是处理大量数字的好方法,但可能不适用于较小的数字
答案 1 :(得分:0)
基本上,您想编写用于算术级数(AP)的程序,即第一个 n 个数字的总和
int main(){
int n;
while(cin >> n){
int m = (n * (n + 1)) / 2;
cout << m << endl;
}
}