题目:
分析:
正负无所谓,就是把符号全部都给变了。
我还有点糊涂。参见代码有详解:
代码:
int t;
if(t<0) t=-t;
int all=0;
int c=1;//代表到c了 超过了t
while(1)
{
all+=c;
if(all==t) return c;
if(all>t) break;
c++;
}
if((all-t)%2==0)
{//如果当前总和与目标差的是一个偶数,那么 把(all-t)/2这个数变为负号就可以啦。
return c;
}
//如果是奇数,c个的时候显然不行了,考虑c+1
//1+...-(sum-target+1)/2+...+c=target-1
//1+...-(sum-target+1)/2+...+c+c+1=target-1
//c是偶数:1+...-(sum-target+1)/2+....-(k/2)...+k+(k+1)=target
if(c%2==0) return c+1;
//c是奇数:
// 1+...-(sum-target+1)/2+...+c=target-1
//1+...-(sum-target+1)/2+...+c-(c+1)+c+2= target
return c+2;