uva_10025 - The ? 1 ? 2 ? ... ? n = k problem
来源:互联网 发布:mac 下载不在dock 编辑:程序博客网 时间:2024/06/12 01:42
The problem
Given the following formula, one can set operators '+' or '-' instead of each '?', in order to obtain a given k
? 1 ? 2 ? ... ? n = k
For example: to obtain k = 12 , the expression to be used will be:
- 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12
with n = 7
The Input
The first line is the number of test cases, followed by a blank line.
Each test case of the input contains integer k (0<=|k|<=1000000000).
Each test case will be separated by a single line.
The Output
For each test case, your program should print the minimal possible n (1<=n) to obtain k with the above formula.
Print a blank line between the outputs for two consecutive test cases.
Sample Input
212-3646397
Sample Output
72701
比较简单的题目, 首先先找出满足1+...+n的和Sn大于或等于k的最小的n,用二分法找出,特殊情况k=0直接输出。第二个就是判断Sn的奇偶性是否与k相等,因为1~n中某一个数字m符号改为-号是,相当于n项和减小偶数2*m,所以Sn必定与k奇偶性相同。
#include <iostream>using namespace std;int main(){ int t, k; cin >> t; while ( t--){ cin >> k; if ( k<0) k = -1*k; if ( !k){ cout << 3 << endl; if( t) cout << endl; continue; } int a = 0, b = 50000,n; int Sn; while ( a <= b){ //二分查找n的值 n = ( a + b )/2; Sn = (n*n+n)/2; if( Sn-n < k && Sn >= k) break; //Sn>=k else if ( k <= Sn - n ) b = n; else if ( k > Sn ) a = n + 1; } if( (Sn&1) != (k&1)){ //判断奇偶性是否相同,若不同Sn还需要加一个奇数 if( n&1) n+=2; // n为奇数,则n+1为偶数,需要n+2 else n++; // n为偶数,则n+1为奇数 } cout << n << endl; if( t) cout << endl; }}
0 0
- uva_10025 - The ? 1 ? 2 ? ... ? n = k problem
- The ? 1 ? 2 ? ... ? n = k problem
- The ? 1 ? 2 ? ... ? n = k problem
- The ? 1 ? 2 ? ... ? n = k problem
- The ? 1 ? 2 ? ... ? n = k problem
- The ? 1 ? 2 ? ... ? n = k problem
- The ? 1 ? 2 ? ... ? n = k problem
- The ? 1 ? 2 ? ... ? n = k problem
- UVa 10025 - The ? 1 ? 2 ? ... ? n = k problem
- uva 10025 The ? 1 ? 2 ? ... ? n = k problem
- Uva 10025 - The ? 1 ? 2 ? ... ? n = k problem
- uva 10025 The ? 1 ? 2 ? ... ? n = k problem
- uva 10025 - The ? 1 ? 2 ? ... ? n = k problem
- UVa 10025 - The ? 1 ? 2 ? ... ? n = k problem
- UVA - 10025 :The ? 1 ? 2 ? ... ? n = k problem
- 10025 - The ? 1 ? 2 ? ... ? n = k problem
- 第一天 The ? 1 ? 2 ? ... ? n = k problem
- UVA10025 The ? 1 ? 2 ? ... ? n = k problem
- 【android】Handler引起的内存泄露及解决办法
- 大话设计模式-单例模式
- 《高级Bash脚本编程指南》之基本实例讲解
- make menuconfig出现问题
- Cookie
- uva_10025 - The ? 1 ? 2 ? ... ? n = k problem
- msdn之调试杂项
- 再次温习下C\C++的内存分配
- asp.net 单窗体模型
- [leetcode] Max Points on a Line
- object-c 学习总结2
- 黑马程序员---了解开发工具及内部类
- [leetcode] Reorder List
- Android开发工具ADT关联源码与API文档