您的位置:首页 > 其它

uva 10025 The ? 1 ? 2 ? ... ? n = k problem

2011-02-11 20:09 399 查看
这个题思路是先求1+2+3+……+n>k的最小n,然后判断1+2+……+n的和减去k是否为偶数,若为偶数,则n即为所求,若不是,则n++重复刚才的判断。把k都当做正数做,它们只差了个符号,在本题没有影响。

程序代码:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int m, n, num;
cin>>m;
while(m--){
cin>>n;
if(n == 0){
cout<<3<<endl;
if(m)  cout<<endl;
continue;
}
n = (int)fabs(n);
num = (int)sqrt(n);
while(1){
if(num * (num + 1) >= 2 * n ){
if(!(num & 1) && !((num / 2 * (num + 1) - n) & 1)){ //避免num * (num + 1)直接相乘益处
break;
}else if((num & 1) && !(((num + 1) / 2 * num - n) & 1))
break;
}
num++;
}
cout<<num<<endl;
if(m)  cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: