小猫钓鱼———队列与栈的结合"/>
小猫钓鱼———队列与栈的结合
小猫钓鱼-----队列与栈的结合
问题描述
星期天xiaoheng和xiaoha约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏–“小猫钓鱼”
游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。xiaoheng先拿出手中的第一张扑克牌放在桌上,然后xiaoha也拿出手中的第一张扑克牌,并放在xiaoheng刚打出的扑克牌上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。
假如游戏开始时,xiaoheng手中有6张牌,顺序为2 4 1 2 5 6,xiaoha手中有6张牌,顺序为3 1 3 5 6 4
最终谁会获胜呢?现在你可以拿出来试一试。
接下来请你写一个程序来自动判断谁将获胜。这里我们做一个约定,xiaoheng和xiaoha手中拍的牌面只有1~9。
输入
只有两行数,每行6个数字(1~9)
输出
第一行:获胜者的名字xiaoha或xiaoheng
第二行:获胜者手里的牌
第三行:桌面剩下的牌
样例输入
2 4 1 2 5 6
3 1 3 5 6 4
样例输出
xiaoha
1 6 5 2 3 4 1
3 4 5 6 2
#include<iostream>
#include<queue>
using namespace std;
int main()
{queue<int> xheng;//定义xiaoheng的队列queue<int> xha;//定义xiaoha的队列int a,temp[100000],c=0;//定义桌面栈for(int i=1;i<=6;i++){cin>>a;xheng.push(a);//将牌依次放入xiaoheng的队列中}for(int i=1;i<=6;i++){cin>>a;xha.push(a);//将牌依次放入xiaoha的队列中}while(!xheng.empty()&&!xha.empty())//只要其中一人队列不为空就继续循环{// xiaoheng出牌 //int t1;t1=xheng.front();//取xiaoheng队首元素xheng.pop();//将xiaoheng队首元素弹出temp[++c]=t1;//将队首元素放入桌面栈中int size=c-1;for(int i=1;i<=size;i++)//从队首开始遍历至队尾之前的元素{if(temp[i]==t1)//如果栈中有相同的元素for(int j=size+1;j>=i;j--){xheng.push(temp[c--]);//从次此元素开始至栈顶依次全部放入xiaoheng的队尾temp[c+1]=0;//将栈中弹出的元素标记为0}}if(xheng.empty())//此时如果xiaoheng的队列为空,跳出循环{ //否则让xiaoha出牌break;}// xiaoha出牌 //int t2; //xiaoha出牌方式与xiaoheng一样不在赘述t2=xha.front();xha.pop();temp[++c]=t2;size=c-1;for(int i=1;i<=size;i++){if(temp[i]==t2)for(int j=size+1;j>=i;j--){xha.push(temp[c--]);temp[c+1]=0;}}if(xha.empty()){break;}}if(xheng.empty()) //判断如果xiaoheng队列为空则xiaoha赢{cout<<"xiaoha"<<endl;int size1=xha.size();for(int i=1;i<=size1;i++) //遍历输出xiaoha队列元素{cout<<xha.front()<<' ';xha.pop();}}else if(xha.empty()) 判断如果xiaoha队列为空则xiaoheng赢{cout<<"xiaoheng"<<endl;int size1=xheng.size();for(int i=1;i<=size1;i++) //遍历输出xiaoheng队列元素{cout<<xheng.front()<<' ';xheng.pop();}}cout<<endl;for(int i=1;i<=c;i++) //遍历输出桌面栈中元素{cout<<temp[i]<<' ';}cout<<endl;
}
更多推荐
小猫钓鱼———队列与栈的结合
发布评论