这个题有意思,一开始没有想到很好的方法,只想到枚举,但是问题很多
看了别人的解题报告http://www.cppblog.com/csu-yx/archive/2012/05/04/173663.html
首先从n(n+1)/2恰好大于等于k的数值开始搜索,k可都视为正数
要将一些符号变成负数,则有
a + b = ... a -b = k
所以必然b是偶数
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <deque>
#include <map>
using namespace std;
///
#define INF 0xffffff7
#define MAXN 200
///
int main()
{
///
int i, j;
int nCases;
int n, sum;
int k;
cin >> nCases;
while (nCases--)
{
cin >> k;
if (k < 0)
k = -k;
i = 1;
while (1)
{
if ( (i * (i + 1) / 2) >= k)
break;
i++;
}
sum = i * (i + 1) / 2;
for (n = i; ;i++)
{
if ((sum - k) % 2 == 0)
break;
else
{
n++;
sum += n;
}
}
cout << n << endl;
if (nCases != 0)
cout << endl;
}
///
return 0;
}