让1到n的数做算术运算(这里仅限于加、减运算)等于k,第一前提是1到n的和[n(n-1)/2]大于等于|k|;
若1到n的和大于|k|,则得再做减法运算,才能等于|k|,而每减一个数m,就相当于少了2m,所以若1到n的和大于|k|,必须得再减去一个偶数,才能等于|k|;
若k为负数,式中的正负号取反即可;
看了一些网友的代码,都把k=0做特殊化处理,但k=0依然可以归为普通情况处理;
请看代码:
#include<stdio.h>
int main() {
int c;
while(scanf("%d", &c) != EOF) {
while(c--) {
int k, sum, i;
scanf("%d", &k);
if(k < 0) k = -k;
sum = 1;
i = 1;
while(sum < k) {
i++;
sum += i;
}
int temp = sum - k;
if(sum == k || temp % 2 == 0)
printf("%d\n", i);
else {
while(temp % 2) {
i++;
temp += i;
}
printf("%d\n", i);
}
if(c) //注意换行
printf("\n");
}
}
return 0;
}
--------------------------------------------------------------------------------------------
Keep It Simple,Stupid!
--------------------------------------------------------------------------------------------