您的位置:首页 > 编程语言 > Python开发

【py交易】算法竞赛入门经典6.1.1卡片游戏 python

2016-11-27 17:39 435 查看
题目:



分析:

1.算法很简单,但是也有个小陷阱,输入n,如果python字典开的跟n一样大的话,后面会有问题(也就是书中用的c语言访问非法内存的问题)

2.假如n = 7,初始化字典为的key为1~7,value为1~7,队首front = 1,队尾rear = 8(比原始的往后一位)

1)输出 key为1的值:1,然后删了,队首后移一位变为2,把这队首赋值给队尾key=8 的值,然后把这个队首删了,然后再把队首往后移一位3=》此时原始的队首1已经删除,新的队首2在赋值给队尾以后也被删除,而队尾增加了一位

2)。。。重复1),队首front一直增加,队尾也一直增加,但是每次循环,队首增加2次,队尾增加一次,所以最后会有front = rear,此时,已经完事!

3)字典初始化的时候一定要比原始的n多一些

# coding=utf-8

n = input("")

card = {}

"构造卡片"
"一定要比n大一些"
for i in range (1,n+10,1):
card[i] = i

front = 1
rear = n +1

while 1:#
print card[front],#打印队首
del card[front]#删除刚刚打印的队首
front = front +1#队首标记后移一位

card[rear] = card[front]#把当前的队首加到队尾
del card[front]#吧2和这个队首再次删除
rear = rear + 1#队尾后移一位,用于下次存储加到队尾的值
front = front + 1#一轮结束以后的新队首
if(front == rear):
break
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: