免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: yingweixu
打印 上一主题 下一主题

Python 练习题 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2014-04-15 13:37 |只看该作者
应该是64个,这个题一定是比人数小的最大的2的n次方个人能活下来,100个就是64,1000个就是512
  1. def lastman(Num):
  2.         countNum = 0
  3.         # ifdead = True
  4.         lastpeople = []
  5.         people = [i for i in range(1,Num+1)]
  6.         while len(lastpeople) != 1:
  7.                 ifdead = True
  8.                 lastpeople = []
  9.                 for x in people:
  10.                         countNum += 1
  11.                         if ifdead == True:
  12.                                 ifdead = not ifdead
  13.                         else:
  14.                                 lastpeople.append(x)
  15.                                 ifdead = not ifdead
  16.                
  17.                 people = lastpeople       
  18.                 #print lastpeople
  19.         return lastpeople[0], countNum
  20.        
  21. print lastman(100)
复制代码

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
42 [报告]
发表于 2014-04-15 22:09 |只看该作者
本帖最后由 cao627 于 2014-04-15 22:13 编辑

@ragkk

这里只是100个数,换成100万个数(或更大)这种方式的程序根本执行不过来。

比如1加到100,你当然可以用循环命令让机器去逐步累加
但是既然数学原理已经证明其公式,写上这个公式,让计算机算岂不更快。

当然,单是用100个数来作为lis的方法的练习,这种方法当然首选。

论坛徽章:
0
43 [报告]
发表于 2014-04-16 09:35 |只看该作者
cao627 发表于 2014-04-15 22:09
@ragkk

这里只是100个数,换成100万个数(或更大)这种方式的程序根本执行不过来。



OK!的确是这样的,如果那个数字很大,比如100亿的数字,当然不可能使用这种方法,把内存给搞死了

所以算法比较重要,根据这个题,可以得出这样的一个结论:

如果N人的话,可以这么算:这个数介于2**x方和2**(x+1)方之间的,那活着的人就是x的数字了

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
44 [报告]
发表于 2014-04-16 10:03 |只看该作者
回复 40# Hadron74
没有去证明,但是从观察看到的规律应当是:
最后活下来的人在开始时的   ID = (Total - 2^k) * 2 ,(其中k是在Total范围内的使得2^k小于Total的最大的自然数)
等有空去证明下,呵呵。

论坛徽章:
0
45 [报告]
发表于 2014-04-16 15:40 |只看该作者
本帖最后由 de7m 于 2014-04-16 20:26 编辑

.. ... ... ... ....

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-02-06 06:20:00
46 [报告]
发表于 2014-04-18 15:45 |只看该作者
这是圆桌算法应用问题吧。

论坛徽章:
1
巳蛇
日期:2014-04-17 12:33:24
47 [报告]
发表于 2014-04-21 15:23 |只看该作者
  1. list = [x for x in range(1,101)]
  2. while len(list) > 1:
  3.         i = 0
  4.         while i < len(list):
  5.                 del list[i]
  6.                 i+=1
  7. print list[0]
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP