【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多一些
分析:
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
相关文章推荐
- 【py交易】算法竞赛入门经典5.4.2 因子和阶乘 Python
- 【py交易】算法竞赛入门经典5.4.4 多少块土地 python
- 【py交易】算法竞赛入门经典6.1.2 铁轨python
- 【py交易】算法竞赛入门经典6.3.1 小球下落 python
- 【py交易】算法竞赛入门经典5.4.3果园里的树 Python
- 算法竞赛入门经典 6.1.1 卡片游戏
- 算法竞赛入门经典 8.3.2循环日程表问题
- 算法竞赛入门经典 习题笔记
- 算法竞赛入门经典2-10 用1,2,3,4,5,6,7,8,9组成3个三位数 abc:def:ghi=1:2:3
- {算法竞赛入门经典}第二章 习题解答及例题小结
- 算法竞赛入门经典 3.2 字符数组
- 算法竞赛入门经典 第二章 上机练习(C++代码)
- 算法竞赛入门经典 例题9-1
- 算法竞赛入门经典 例题8-1
- 算法竞赛入门经典 例题7-2 埃及分数
- 算法竞赛入门经典 3.3 最长回文子串
- 算法竞赛入门经典 3.2 字符数组
- 20100617--算法竞赛入门经典 语言篇读书笔记
- {算法竞赛入门经典}第二章 文件操作 重定向及fopen版本
- 算法竞赛入门经典 1.1 算术表达式