【py交易】算法竞赛入门经典6.3.1 小球下落 python
2016-12-06 00:02
330 查看
题目:
分析:
1.深度为D的开关二叉树共有2^D -1 个开关,从上到下,从做到右排序1,2,3,…,2^D-1
2.最开始,这课开关二叉树上的所有开关都是关闭状态,假设为off状态,当有一个小球经过以后,开关由off状态变为on状态
3.举个例子(不举),假设D=4,则共有15个开关,顺序如图上。
1)第一个小球下落的时候,首先经过开关1,因为开关1是off状态,所以小球往左走,开关1 的状态变为on
2)小球到达2,因为开关2的状态是off,所以小球往左走,开关2的状态变为on
3)小球到达4,因为开关4的状态是off,所以小球往左走,开关4的状态变为on
4)小球到达8,走不了了,则第一个小球的终点就是8号开关
5)第二个小球,首先经过开关1,因为开关1是on状态,所以小球往右走,开关1变为off,
。。。
n)第二个小球抵达12号开关
4.每个小球都要经过开关1,所以遍历的时候需要设一个临时的变量k,记录小球走的开关号
5.若是小球从一个off的开关m经过,则下一步就是王左走,即2m号开关,否则走向2m+1号开关
6.小球最大编号不能超过2^D-1,小球走到某个开关以后,会把开关需要翻倍(2m或者2m+1),所以小球最终所在的开关需要要除以2
code below:
更简便的方法:
分析:
1.深度为D的开关二叉树共有2^D -1 个开关,从上到下,从做到右排序1,2,3,…,2^D-1
2.最开始,这课开关二叉树上的所有开关都是关闭状态,假设为off状态,当有一个小球经过以后,开关由off状态变为on状态
3.举个例子(不举),假设D=4,则共有15个开关,顺序如图上。
1)第一个小球下落的时候,首先经过开关1,因为开关1是off状态,所以小球往左走,开关1 的状态变为on
2)小球到达2,因为开关2的状态是off,所以小球往左走,开关2的状态变为on
3)小球到达4,因为开关4的状态是off,所以小球往左走,开关4的状态变为on
4)小球到达8,走不了了,则第一个小球的终点就是8号开关
5)第二个小球,首先经过开关1,因为开关1是on状态,所以小球往右走,开关1变为off,
。。。
n)第二个小球抵达12号开关
4.每个小球都要经过开关1,所以遍历的时候需要设一个临时的变量k,记录小球走的开关号
5.若是小球从一个off的开关m经过,则下一步就是王左走,即2m号开关,否则走向2m+1号开关
6.小球最大编号不能超过2^D-1,小球走到某个开关以后,会把开关需要翻倍(2m或者2m+1),所以小球最终所在的开关需要要除以2
code below:
# coding=utf-8 import math D = 4 I = 2 n = int(round((math.pow(2,D))-1))#2^D-1 s = {} def reverseRes(num): if num == 1: return 0 elif num == 0: return 1 "初始化所有开关" for index in range(1,n,1): s[index] = 0 #所有开关都关闭 for index in range(1,I+1,1):#遍历每个小球 k = 1#需要一个辅助的编号,因为小球每次都是从第一个开关经过的 while 1: s[k] = reverseRes(s[k]) #小球经过的开关改变 if s[k] == 1:#小球经过以后,开关打开了,说明经过之前是闭合的,所以往左走 k = 2*k else: k = 2*k+1 if k > n: break print k/2
更简便的方法:
相关文章推荐
- 【py交易】算法竞赛入门经典6.1.1卡片游戏 python
- 【py交易】算法竞赛入门经典5.4.4 多少块土地 python
- 【py交易】算法竞赛入门经典5.4.3果园里的树 Python
- 【py交易】算法竞赛入门经典6.1.2 铁轨python
- 【py交易】算法竞赛入门经典5.4.2 因子和阶乘 Python
- 算法竞赛入门经典:第六章 数据结构基础 6.5小球下落
- 算法竞赛入门经典:第六章 数据结构基础 6.3移动小球
- 算法竞赛入门经典 下落的树叶
- 算法竞赛入门——小球下落
- 算法竞赛入门经典 2.1 for 循环
- 算法竞赛入门经典 1.1 算术表达式
- 算法竞赛入门经典 例题7-3 倒水问题
- 算法竞赛入门经典 例题9-1
- 刘汝佳算法竞赛入门经典中的运算符>?问题
- 算法竞赛入门经典 3.3 最长回文子串
- 算法竞赛入门经典 7.5.3 八数码问题
- 算法竞赛入门经典 8.3.1 棋盘覆盖问题
- 算法竞赛入门经典chapter4:4-1孪生素数
- 算法竞赛入门经典 第二章 上机练习(C++代码)
- 算法竞赛入门经典 习题笔记