[蓝桥杯2012高职C试题]巧排扑克牌
来源:互联网 发布:plsql怎么连接到数据库 编辑:程序博客网 时间:2024/05/21 12:01
题目内容
小明刚上小学,学会了第一个扑克牌“魔术”,到处给人表演。魔术的内容是这样的:
他手里握着一叠扑克牌:A,2,....J,Q,K 一共13张。他先自己精心设计它们的顺序,然后正面朝下拿着,开始表演。
只见他先从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是A;然后再从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是2;......如此循环直到手中只有一张牌,翻开放桌子上,刚好是K。
这时,桌上牌的顺序是:A,2,3,4,5,6,7,8,9,10,J,Q,K
请你计算一下,小明最开始的时候手里牌的顺序是怎样的。
把结果写出来,逗号分割,小明“魔术”开始时,最下面的那张牌输出为第一个数据。
考场不提供扑克牌,你只能用计算机模拟了,撕碎草稿纸模拟扑克属于作弊行为!另外,你有没有把录像倒着放过?很有趣的!回去试试!
对于大学生们蜂拥而上抢着参加的蓝桥杯我只能呵呵了,这个题真的是个恶心的模拟水题,实在搞不懂为什么湖师这么多老师+学生做不出来,用一个队列来模拟小明童鞋手中的扑克牌堆就行了,按着题目上说的做,把队首出队再踢进队尾,再出一次队首,一直这样循环直到队列空掉为止,就这么简单,我20min一遍AC
#include <stdio.h>#include <queue>using namespace std;struct card{char num; //num=牌上标的数字int id; //id=第id张牌}member,first,second,in[13]; //队首=first,从前往后第二个牌=second,queue <card> q;char out[13]={'A','2','3','4','5','6','7','8','9','T','J','Q','K'};int main(){int i,j;member.num=-1;for(i=0;i<13;i++){member.id=i;q.push(member); //首先队列里推入13个-1,表示13个牌都是未知的}i=0,j=0;while(!q.empty()) //所有牌没清完,就一直循环{first=q.front();q.pop();q.push(first); //队首弹出,压入队尾second=q.front(); //弹出第二张牌q.pop();second.num=out[i++];in[second.id]=second;}for(i=0;i<13;i++){if(in[i].num=='T') printf("10");else printf("%c",in[i].num);if(i!=12)printf(",");elseprintf("\n");}return 0;}
下面是我爸做的,使用数组模拟队列,简化更多了,代码才20+行,我擦屌爆了,ORZ
#include<stdio.h>int main(){ int first[13],n[13]={0},i=0,c=1; char card[15]=" A23456789TJQK";while(1){ while(n[i]==1) //找出第一个到没有翻过的牌 i=(i+1)%13; i=(i+1)%13; //跳过这张牌 while(n[i]==1) //继续找出下一个到没有翻过的牌 i=(i+1)%13;n[i]=1; //给这张牌做翻过的标记,这张牌的序号是ifirst[i]=c++; //第i张牌是Cif(c==14) break;}for(i=12;i>=0;i--) //将牌翻过来输出if(first[i]==10) printf("10 ");elseprintf("%c ",card[first[i]]);return 0;}
0 0
- [蓝桥杯2012高职C试题]巧排扑克牌
- 2012蓝桥杯【初赛试题】 巧排扑克牌
- 2012蓝桥杯【初赛试题】 巧排扑克牌
- 【Java实现】2012蓝桥杯C++高职组第四题——巧排扑克牌
- 蓝桥杯历届-巧排扑克牌
- 2012年决赛 c/c++ 高职试题
- 4.巧排扑克牌
- 巧排扑克牌
- 巧排扑克牌
- 巧排扑克牌
- 算法—巧排扑克牌(C语言)
- 【第三届蓝桥杯】巧排扑克牌
- 蓝桥杯 结果填空 巧排扑克牌 数组模拟
- 蓝桥杯 预赛 Java高职高专组 试题
- 华为面试题:扑克牌大小 C语言源码
- 蓝桥杯2012预赛java高职题分析
- 蓝桥杯2011c/c++组高职决赛题分析
- 第四届 蓝桥杯C/C++ 高职 5公约数公倍数
- Oracle EBS SLA 详解
- C++编程调用LUA脚本
- 假定有20个 有序 数组,每个数组有500个数字,数字类型32位uint数值,现在需要取出这10000个数字中最大的500个,怎么做?
- TOM猫
- Memcached Wiki 四 使用
- [蓝桥杯2012高职C试题]巧排扑克牌
- 网络爬虫
- 闪电狗 是个
- NYOJ 155 求高精度幂
- LR杂记-nmon+analyser监控linux系统资源
- 浅谈C++中的string 类型占几个字节
- java学习感悟
- Android——碎片Fragment
- 设计模式-封装