- 队列与栈的综合运用
- 代码详情:两个人打牌,分别依次将牌放到桌子上,若A出的牌与桌子上的牌一样,则A将桌子上两张一样的牌及其中间所有牌放到A手中,看A,B两个人谁先打完所有牌。
-
//队列与栈的综合运用 #include<stdio.h> struct queue { int data[1000]; int head; int tail; }; struct stack { int data[10]; int top; }; int main() { struct queue q1,q2;//俩个队列 struct stack s;//一个栈 int book[10]; int i,t; q1.head=1; q1.tail=1; q2.head=1; q2.tail=1;//初始化队列 s.top=0;//初始化栈 for(i=1;i<=9;i++){//初始化用来标记的数组,用来标记牌是否在桌上 book[i]=0; } printf("q1手中的牌为:"); for(i=1;i<=6;i++){//给q1发6张牌 scanf("%d",&q1.data[q1.tail]); q1.tail++; } printf("\nq2手中的牌为:"); for(i=1;i<=6;i++){//给q2发6张牌 scanf("%d",&q2.data[q2.tail]); q2.tail++; } while(q1.head<q1.tail&&q2.head<q2.tail)//当俩个队列不为空,执行循环 { t=q1.data[q1.head];//q1出一张牌 //判断桌上是否有这张牌 if(book[t]==0){//桌上没有这张牌 q1.head++;//q1已经打出一张牌,所以要把这张牌出列 s.top++; s.data[s.top]=t;//把打出的那张牌放到桌上,入栈 book[t]=1;//标记桌上已经有了牌面为t的牌 } else{//桌上有这张牌 q1.head++;//q1已经打出一张牌,所以要把这张牌出列 q1.data[q1.tail]=t;//把刚刚打出的牌拿回,放在牌尾 q1.tail++; while(s.data[s.top]!=t){//把桌上可以赢得的牌放到牌尾 book[s.data[s.top]]=0;//取消标记 q1.data[q1.tail]=s.data[s.top];//依次放入牌尾 q1.tail++; s.top--;//栈中少牌,栈顶-1 } book[s.data[s.top]]=0; q1.data[q1.tail]=s.data[s.top]; q1.tail++; s.top--; //收回桌上牌面为t的牌 } if(q1.head==q1.tail)break;//q1如果牌打完,游戏结束 t=q2.data[q2.head]; if(book[t]==0){ q2.head++; s.top++; s.data[s.top]=t; book[t]=1; } else{ q2.head++; q2.data[q2.tail]=t; q2.tail++; while(s.data[s.top]!=t){ book[s.data[s.top]]=0; q2.data[q2.tail]=s.data[s.top]; q2.tail++; s.top--; } book[s.data[s.top]]=0; q2.data[q2.tail]=s.data[s.top]; q2.tail++; s.top--; } } if(q2.head==q2.tail){ printf("q1WIN\n"); printf("q1当前手中的牌为:"); for(i=q1.head;i<=q1.tail-1;i++){ printf(" %d",q1.data[i]); } if(s.top>0){ printf("\n桌上的牌为:"); for(i=1;i<=s.top;i++){ printf(" %d",s.data[i]); } } else{ printf("\n桌上没有牌了"); } } else{ printf("q2WIN\n"); printf("q2当前手中的牌为:"); for(i=q2.head;i<=q2.tail-1;i++){ printf(" %d",q2.data[i]); } if(s.top>0){ printf("\n桌上的牌为:"); for(i=1;i<=s.top;i++){ printf(" %d",s.data[i]); } } else{ printf("\n桌上没有牌了"); } } return 0; }
【Aha】算法篇之扑克游戏(小猫钓鱼)
猜你喜欢
转载自blog.csdn.net/qq_42735631/article/details/81328996
今日推荐
周排行