题目:10025 - The ? 1 ? 2 ? ... ? n = k problem
题目大意:就是用 + ,- 来代替?, 要求给定一个k值,给出1 ~ n个数相加减等于k,n要求最小。
解题思路:先给出从1 ~ m,相加大于k吗,大于就说明要减掉一个数,而减掉一个数,总值就减少了这个数的两倍。所以一旦总值和k之差是偶数,就说明能过通过减掉其中的一些数来使总值为k,这时就找到n的值。如果比k小就继续加,再重复上面的操作。负数的话就取正。相当于找到一个正数与负数的绝对值相等,只要将加号减号对调,就可以得到负数的值。
#include<stdio.h>
int n, k;
char ch;
int main() {
scanf("%d", &n);
while(n--) {
scanf("%d", &k);
int sum = 0, i;
if(k < 0)
k = -k;
for ( i = 1; ; i++) {
sum += i;
if( sum > k && (sum - k) % 2 == 0 )
sum -= sum - k;
if(sum == k) {
printf("%d\n", i);
break;
}
}
if(n)
printf("\n");
}
return 0;
}