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

时间:2019-01-06 20:34:05

标签: c++

在给定数字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;
    }
}

2 个答案:

答案 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;
    }
}