题意:给出最后的结果,在1,2,3,4,。。。。n的前面添加+或者-,使得式子运算结果等于给出的结果
解析:如果给定的结果是一个正数,那么我们需要找到一个前N项和大于给定结果的n,然后在此基础上添加减号。这里需要注意的是,在一个数前面添加一个减号,就相当于在总和里减去这个数的2倍,所以总和和给定的结果之间的差值一定要是偶数才可以,如果不是偶数,则无从添加减号。所以找到的n不是最小的,需要继续添加。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int i,j,n,t;
long long k,sum;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&k);
if(k < 0)
k = -k;
for(i = 1;i < 100000;i++)
{
if(i * (i + 1) >= 2 * k)
break;
}
sum = (i * (i + 1))/2;
while((sum - k)%2 != 0)
{
i++;
sum += i;
}
if(t > 0)
printf("%d\n\n",i);
else
printf("%d\n",i);
}
return 0;
}