星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。(用两个队列和一个栈完成)
输入要求
输入每人手中的六张牌
/*
思路分析:此题可以把两个人手中的扑克牌看成两个队列,因为这样刚刚好,可以符合游戏规则,
先进先出的特点
然后把桌面上的牌看成一个栈,也是符合题目的要求先进后出
*/
#include<iostream>
using namespace std;
struct queue{
int data[100];
int head;
int tail;
};
struct stack{
int data[1000];
int top;
};
int main(){
int book[10]={0};
struct queue q1,q2;//q1为小哈,q2为小柯
q1.head = 1;
q2.head = 1;
q1.tail = 1;
q2.tail = 1;
struct stack s;
s.top = -1;
for(int i=0;i<6;i++){
cin>>q1.data[q1.tail++];
}
for(int i=0;i<6;i++){
cin>>q2.data[q2.tail++];
}
while(q1.head < q1.tail && q2.head < q2.tail){
if(book[q1.data[q1.head]] == 1){//判断桌面上是否有这个牌
q1.data[q1.tail++] = q1.data[q1.head];
book[q1.data[q1.head]] = 0;
while(s.data[s.top] != q1.data[q1.head]){
q1.data[q1.tail++] = s.data[s.top];
book[s.data[s.top]] = 0;
s.top--;
}
q1.data[q1.tail++] = s.data[s.top];
book[s.data[s.top]] = 0;
s.top--;
q1.head++;
}else{
//小哈先出牌
s.data[++s.top] = q1.data[q1.head];
book[q1.data[q1.head]] = 1;
q1.head++;
}
if(book[q2.data[q2.head]] == 1){
q2.data[q2.tail++] = q2.data[q2.head];
book[q2.data[q2.head]] = 0;
while(s.data[s.top] != q2.data[q2.head]){
q2.data[q2.tail++] = s.data[s.top];
book[s.data[s.top]] = 0;
s.top--;
}
q2.data[q2.tail++] = s.data[s.top];
book[s.data[s.top]] = 0;
s.top--;
q2.head++;
}else{
//小柯后出牌
s.data[++s.top] = q2.data[q2.head];
book[q2.data[q2.head]] = 1;
q2.head++;
}
}
if(q1.head == q1.tail){
cout<<"小哈输了"<<endl;
cout<<"桌上面的牌:";
for(int i=0;i<=s.top;i++){
cout<<s.data[i]<<" ";
}
cout<<endl;
cout<<"小柯手中的牌:";
for(int i=q2.head;i<q2.tail;i++){
cout<<q2.data[i]<<" ";
}
cout<<endl;
} else{
cout<<"小柯输了"<<endl;
cout<<"桌上面的牌:";
for(int i=0;i<=s.top;i++){
cout<<s.data[i]<<" ";
}
cout<<endl;
cout<<"小哈手中的牌:";
for(int i=q1.head;i<q1.tail;i++){
cout<<q1.data[i]<<" ";
}
cout<<endl;
}
return 0;
}