纸牌游戏-小猫钓鱼
来源:互联网 发布:ubuntu安装图形界面 编辑:程序博客网 时间:2024/03/29 20:57
这题是我再一个一篇文章看到的,他用c写的,我该用java来测试一下。一方面熟悉一下集合Queue和Stack,另一方面看一下这个算法。
题目:假设游戏开始时q1和q2都有6张牌,分别顺序为2 4 1 2 5 6和3 1 3 5 6 4,游戏规则为轮流出牌,当谁出牌与桌子上的目标牌有相同时,则可以收掉与桌面目标牌之间的几张牌,全部放在牌的尾部。但是除了桌面的那张目标牌。当谁手上没有牌时,则对方胜利。
这个题目可以使用一个栈和两个队列。利用栈的“先进先出的特点”,将桌面上的牌放入栈中,利用队列“先进后出,对头出,队尾进”的特点,将两个人的牌分别用队列存储。同时用一个整形数组判断桌面是否与手上的数一致。
值得注意的是Java中的Stack是一个类,Queue是一个接口,可以用他的实现类ArrayDeque。具体分析,见代码:
public class Test {
public static void main(String[] args) {
Queue<Integer> q1 = new ArrayDeque<Integer>();
Queue<Integer> q2 = new ArrayDeque<Integer>();
Stack<Integer> s=new Stack();
Scanner scan=new Scanner(System.in);
int book[]=new int[10];
//初始化队列和栈
//初始化用来标记的数组,用来标记哪些牌已经在桌子上
for(int i=0;i<10;i++){
book[i]=0;
}
//依次向队列q1中插入6个数
for(int i=1;i<=6;i++){
int c=scan.nextInt();
q1.add(c);
}
//依次向队列q2中插入6个数
for(int i=1;i<=6;i++){
int cc=scan.nextInt();
q2.add(cc);
}
int t,p;//t存放打出一张牌,p存放将桌面上的牌放到自己手上
//当队列不为空时
while(!q1.isEmpty() && !q2.isEmpty()){
//q1出一张牌,出队列
t=q1.poll();
//判断这张牌是否能赢牌
if(book[t]==0){//不能银牌
book[t]=1;
//进栈
s.push(t);
}else{//能银牌
//将打出的牌放到末尾
q1.add(t);
//把桌子上的在t之间的牌全部放到q1末尾
/*while(s.peek()!=t){
p=s.pop();
book[p]=0;
q1.add(p);
}*/
while(s.peek()!=t){
p=s.pop();
book[p]=0;
q1.add(p);
}
}
//q2出一张牌,已经出队列了
t=q2.poll();
if(book[t]==0){//不能赢牌
book[t]=1;
s.push(t);
}else{//能赢牌
q2.add(t);
while(s.peek()!=t){
p=s.pop();
book[p]=0;
q2.add(p);
}
}
}
if(q1.isEmpty()){
System.out.println("q2 is win");
System.out.println("q2当前手上的牌是: ");
while(!q2.isEmpty()){
System.out.print(q2.poll()+" ");
}
if(!s.isEmpty()){
System.out.println();
System.out.println("桌上的牌是: ");
while(!s.isEmpty()){
System.out.print(s.pop()+" ");
}
}
}
if(q2.isEmpty()){
System.out.println("q1 is win");
System.out.println("q1当前手上的牌是: ");
while(!q1.isEmpty()){
System.out.print(q1.poll()+" ");
}
if(!s.isEmpty()){
System.out.println();
System.out.println("桌上的牌是: ");
while(!s.isEmpty()){
System.out.print(s.pop()+" ");
}
}
}
}
}
后期大家可以试试将目标牌也收了的情况,我试了一下,不对。没有再去思考了。这题可以给个参考例子,
2 4 1 2 5 6
3 1 3 5 6 4
运行结果;
q1 is win
q1当前手上的牌是:
5 6 2 3 1 4 6 5
桌上的牌是: (这个与实际情况相反,可以自己去转换一下)
4 3 1 2
- 纸牌游戏-小猫钓鱼
- 纸牌游戏--小猫钓鱼
- [数据结构]纸牌游戏——小猫钓鱼
- 2.3纸牌游戏——小猫钓鱼
- 纸牌游戏——小猫钓鱼
- 纸牌游戏——小猫钓鱼
- 纸牌游戏——小猫钓鱼(阿哈!算法)
- 啊哈!算法—纸牌游戏—小猫钓鱼
- java实现纸牌游戏-小猫钓鱼算法
- 算法入门——小猫钓鱼纸牌
- 纸牌游戏——小猫钓鱼 栈与队列合用实现
- 纸牌游戏-小猫钓鱼(队列和栈的基本应用)
- 小猫钓鱼游戏java实现
- 小猫钓鱼
- 小猫钓鱼偶感!
- 栈与队列,小猫钓鱼
- 寒假算法第三编——小猫钓鱼游戏(栈与队列综合问题)
- 纸牌游戏
- Scrapy爬虫入门教程四 Spider(爬虫)
- TF-IDF与余弦相似性的应用(三):自动摘要
- Cmake中查找并使用其他程序库
- 这是一篇博客
- SpringBoot学习心得
- 纸牌游戏-小猫钓鱼
- Java反射机制总结学习--调用类的方法
- java 将捕获的异常添加到数据库
- CentOS6安装xgboost方法
- ice框架应用记录-框架说明
- centos配置--常用命令
- Hadoop Hbase分布式部署基础配置
- MFC实现不规则形状窗口
- iphone模拟不同的网络状态