您的位置:首页 > 编程语言 > C语言/C++

UVA 10025-The ? 1 ? 2 ? ... ? n = k problem

2016-07-20 15:57 267 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva c语言