原题来自蓝桥杯第七届个人赛大赛C,C++类A组第二题


生日蜡烛

某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。

现在算起来,他一共吹熄了236根蜡烛。

请问,他从多少岁开始过生日party的?

请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

最开始自己写的是两个循环,发现实在太傻,而且数一旦变大直接就超时所以在和小伙伴讨论了过后更改了算法

使时间复杂度变为O(n),使用贪心的思想,从一开始加如果超出范围则从头开始减,时间复杂度最坏为2n.

然后从求等差数列公式开始设首项为X;项数为N;合为Count;有Count = (X+X+N-1)*N/2.式中X为整数X = (2*Count/N-N+1)/2.对式中的N枚举N<sqrt(2*Count),时间复杂度接近sqrt(N);