跳跃的蚂蚱
来源:互联网 发布:爱淘宝api 编辑:程序博客网 时间:2024/04/28 15:25
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
小B对脑筋急转弯问题很有兴趣,她觉得这种问题的挑战能够反映一个人的应急反应能力。她正在开发一个智力测试的游戏,游戏的主角是一个蚂蚱。蚂蚱最初位于0点处,可以在直线上向正向或反向两个方向跳跃。比较特别的是,蚂蚱每次跳跃的距离比前一次跳跃多一个单位,第一次跳跃的距离为一个单位。
小B的问题是,如果让蚂蚱跳跃到x处,需要经过多少次跳跃,你能解决这个问题吗?
输入
输入中有多组测试数据。每组测试数据为单独的一行,包含一个整数x(-10^9 =< x =< 10^9)。
输出
对每组测试数据,在单独的行中输出蚂蚱最少需要跳跃的次数。
样例输入
2
6
0
样例输出
3
3
0
我相信这到题看到的时候都会好不犹豫的写出像我写的这样的翔代码:
int leeco(int n) { int sum = 0; int step = 1; int count = 0; while (sum != n ) { if (sum + step > n) sum -= step; else sum += step; count++; step++; } return count;}
结果是只能a对17%,有可能还是测试用例0,后来越想越觉得这题像动态规划,可是呢,这动态规划里面子问题一直在增加,比如你第一次跳可以到1,和-1两个位置,第二次就在这基础上多两个位置,就成为了4个位置,而最后的位置和我们上一次的位置和将要跳跃的步数都有关系,所以这么做肯定是不怎么靠谱的。网上大神的解释,可以得出这题的解法:
令S(n)为跳的所有路程,x是我们要到达的目标,则S(n) = 1+2+3…+n,如果我们S(n)>x,我们需要折返,假设我们在m位置折返,那么我们比不折返少了2m,也就是说我们实际的距离S(n)-2m = x,才行,那么我们跳跃到x的条件就是(S(n) - x)必须是一个偶数,n就是我们的跳跃次数,如果S(n) - x是一个奇数,那么可以知道S(n+1)-x必定是一个偶数,这个时候是n+1次
int mazha(int x) { int n = floor(sqrt(2.0 * x)); if (n * (n + 1) < 2 * x) n += 1; int flag = (int)abs(n * (n + 1) / 2 - x) & 1;//奇数还是偶数 return flag ? (n+1):n;//奇数(n+1)偶数(n)}
比较了两种方法前十位置的跳跃次数,就知道一开始的想法是错的了
test0正确值0暴力方法的值0
test1正确值1暴力方法的值1
test2正确值3暴力方法的值3
test3正确值2暴力方法的值2
test4正确值3暴力方法的值4
test5正确值4暴力方法的值6
test6正确值3暴力方法的值3
test7正确值5暴力方法的值5
test8正确值4暴力方法的值7
test9正确值5暴力方法的值9
- 跳跃的蚂蚱
- 跳跃的蚂蚱
- 蚂蚱跳跃问题
- 三、 乐视2017秋招<跳跃的蚂蚱>
- 蚂蚱跳跃(移动距离)
- 网络视频和移动营销 一根绳子上的蚂蚱
- 用ln命令链接文件 --- 一根绳子上的蚂蚱?
- 普通运维人员就是秋后的蚂蚱!
- 跳跃!跳跃!不断的跳跃!《Jump and Fly》的世界
- 跳跃的幻想
- 微博的跳跃
- 跳跃表的实现
- 跳跃的圆形幻灯片
- 时间的跳跃处理
- 跳跃数的判断
- 欢乐的跳跃者
- 跳跃表的实现
- 跳跃表的实现
- amoeba启动报错The stack size specified is too small, Specify at least 228k
- 剑指Offer——迅雷笔试题+知识点总结
- Python操作MySql数据库
- Android toolbar各类知识
- Gradle 实现 Android 多渠道定制化打包
- 跳跃的蚂蚱
- 根据经纬度(lat,lng)查找附近的地点(续)
- php连接memcache与简单操作
- python常用内置方法''
- 取出文本中的图片地址
- 学习之路——正则表达式(上)
- VFS中的基本数据结构
- phpstuday mysql的慢日志开启及查询
- scrollView相关