UVa 10025 - The ? 1 ? 2 ? ... ? n = k problem
来源:互联网 发布:牧草大数据 编辑:程序博客网 时间:2024/05/29 06:36
题目:给你一个整数m,你需要确定一个从1开始的连续整数集合,使得所有数字之和是m。
每个数字可以取正好或者负号中的一个。
分析:简单题、找规律。我们先把前几个集合写出来
原始集合: 可计算出的结果:
{1} {±1}
{1,2} {±1,±3}
{1,2,3} {±0,±2,±4,±6}
{1,2,3,4} {±0,±2,±4,±6,±8,±10}
{1,2,3,4,5} {±1,±3,±5,±7,±9,±11,±13,±15}
通过观察,可以发现规律,生成集合分为奇数集合和偶数集合两种,而且两组一次变化,
并且是区间[ 0,(n(n+1))/ 2 ]上所有的奇数和偶数。
所以只要能够找到最小的数字n,使得m <(n(n+1))/ 2 就能确定我们要找的数字。
如果{1,...,n}能确定的集合的奇偶性和m的相同,n即为所求;否则,答案就是n+1或者n+2 。
说明:╮(╯▽╰)╭由于本人比较懒,所以利用循环求解,应该可以常数时间确定n。
#include <iostream>#include <cstdlib>#include <cmath>using namespace std;int calc( int a ){int i = 1; while ( (i*(i+1))>>1 < a )i ++;while ( (i+1)/2%2 != a%2 ) i ++;return i;}int main(){int n,m;while ( cin >> n )while ( n -- ) {cin >> m;m = abs(m);cout << calc( m ) << endl;if ( n ) cout << endl;}return 0;}
- 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
- Uva 10025 - The ? 1 ? 2 ? ... ? n = k problem
- uva 10025The ? 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
- uva 10025 - The ? 1 ? 2 ? ... ? n = k problem
- uva 10025 - The 1 2 ... n = k problem
- Android UI结构源码研究
- java split
- java中vector和array list
- 设计模式六大原则——开放封闭原则(OCP)
- ios - Foundation框架 - NSDictionary
- UVa 10025 - The ? 1 ? 2 ? ... ? n = k problem
- 《算法导论》笔记 第21章 21.1 不相交集合上的操作
- 判断数据全部为某一个值(“NULL”)的3种方法
- uva 846
- POJ Nim(2068)
- Ant 命令行创建一个Android工程
- ADO数据库访问技术总结
- 关于UITableView中每个section的header显示
- 每日算法之五:Longest Palindromic Substring