首先找到前n项和S刚好比k大的位置,然后判断和S与k的差值,如果是偶数及ok(因为此时可以通过改变前n项中某一个数字x的符号,使得和S减少2x,从而等于k),如果是奇数,n增大直到差为偶数。
注意k=0这种边界情况,此时应该输出n=3 (因为题目中n>=1)。
/* * uva10025.cpp * * Created on: 2013-4-17 * Author: kevinjiang */ #include<cstdio> #include<cmath> int main() { int cases; int n; int k; scanf("%d", &cases); while (cases--) { scanf("%d", &k); if (k < 0) k = -k; n = (int) sqrt(2 * k) - 1; if(n<1) n=1; for (; (n * (n + 1) / 2 < k) || ((n * (n + 1) / 2 - k) % 2 == 1); n++) { } printf("%d\n", n); if (cases) printf("\n"); } return 0; }
相关推荐
Uva 100 ,问题是The 3n+1 probelm ,可以ac的代码
UVA 100题答案
判断输入字符串是否为镜像或回文串。 来源于UVaOJ - 401. 水题。
开源项目-codingsince1985-UVa#uva-online-judge-solutions-in-golang.zip,两年来每天都在解决一个uva在线裁判问题,算起来…
uva705 Slash Maze 的代码,在UVaOJ上通过
Algorithm-UVA-Solutions-in-Python.zip,python 3中各种uva(acm)问题的解决方案。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
uva532 Dungeon Master的源代码,并且AC了
这是UVA133 TheDoleQueue救济金发放问题,经典的算法问题。初学算法的人要对这种算法非常熟悉并且能熟练运用。
PDF试题