这一题看上去很复杂,其实思路很简单。
从1加到N直到和sum为n或者刚好大于n,如果相等就直接输出了。
sum>n时,如果sum-n为奇数,则不管怎么改都不能实现,因为任意改一个数减少量必然为偶数,这时候N++。
如果sum-n为偶数,更改1~N前的符号减少量分别为2,4,6~~2N,必然可以使sum==n。
求和公式是sum=N(N+1)/2,可以用sqrt(2*n)得到接近结果的值。
#include <cstdio>
#include <cmath>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int res,t;
int m=(int)sqrt(2*n);
while((t=m*(m+1)/2)<n||(t-n)%2==1)m++;
printf("%d\n",m);
}
return 0;
}