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

题目:
这里写图片描述

分析:
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值