UVA 10025-The ? 1 ? 2 ? … ? n = k problem
题目大意:给一个数字k,?1?2?……?n = k,?代表正负号,求用最少的数字使得式子成立。
解题思路:当?全为加号得到的数减去k等于一个偶数时式子成立,可以用等差求和加快效率
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
int main() {
long long int n;
long long int a;
long long int i;
cin >> n;
while(n--) {
cin >> a;
if (a < 0)
a = -a;
if(a == 0)
i = 3;
else {
i = (sqrt(1+8*a)-1) / 2;
for(long long int l = (i * (1 + i)/2 - a) ; l < 0 || l % 2 != 0;) {
i++;
l = l + i;
}
}
printf("%lld\n", i);
if(n)
printf("\n");
}
return 0;
}