Uva--10025 (数学,推理)
2014-06-07 22:22:40
题意&思路:±1 ± 2 ± 3 ±…± n = k , 找出满足条件的最小 n. 令S(n)=1 + 2 + 3 + ... + n. 其中一项为x. 那么S(n)=1 + 2 + 3 + ...+ x + ... + n. 这样结果可能大于等于 | k | ,等于最好,即一次算出。
所以我们把+ x 改成- x,此时得到新的关系:S'(n)=1+2+...-x+...+n. => S(n)-S'(n)=2x;且k=S'(n).令y=2x. 利用这个特性,找出一个满足条件的y(即y是偶数)即可
下面给出不是非常严谨但足以说明问题的数学证明:(如有更好的证明,还望不吝赐教!)
#include <cmath> #include <iostream> using namespace std; int main(){ int t,n,num; cin >> n; while(n--){ cin >> num; for(t = sqrt(2.0 * abs(num));;++t){ int temp = t * (t + 1) / 2; if(temp && temp >= num && (temp - num) % 2 == 0){ cout << t << endl; break; } } if(n) cout << endl; } return 0; }