|
#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 i,t,book[10]={0}; //初始化队列 q1.head=1;q1.tail=1; q2.head=1;q2.tail=1; //初始化栈 s.top=0; //给小哼发牌 for(i=1;i<=6;i++) { scanf("%d",&q1.data[q1.tail]); q1.tail++; } //给小哈发牌 for(i=1;i<=6;i++) { scanf("%d",&q2.data[q2.tail]); q2.tail++; } while(q1.head<q1.tail&&q2.head<q2.tail)//当小哼或者小哈手上的牌打完,则判断游戏结束 { //小哼出牌阶段 t=q1.data[q1.head];//标记小哼打出的牌 if(book[t]==0)//小哼打出的牌没有和桌子上一致,则没有赢牌 { q1.head++;//打出的牌出列 s.data[++s.top]=t;//打出的牌入栈 book[t]=1;//记下桌子上小哼打出的牌 } else//小哼发现打出的牌与桌子上某一张一样,则说明赢牌 { q1.head++;//打出的牌出列 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--; } //收下另一张与打出的牌相同的牌,并将它们放到手牌后面 q1.data[q1.tail]=s.data[s.top]; q1.tail++; s.top--; book[t]=0;//此时小哼打出的牌在桌子上的出现次数归零 } if(q1.head==q1.tail) break;//如果小哼打完手中牌,则游戏结束 //小哈出牌阶段 t=q2.data[q2.head];//标记小哈打出的牌 if(book[t]==0)//小哈打出的牌没有和桌子上一致,则没有赢牌 { q2.head++;//打出的牌出列 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--; } //小哈收下与打出的牌相同的牌 q2.data[q2.tail]=s.data[s.top]; q2.tail++; s.top--; book[t]=0;//此时小哈打出的牌在桌子上在桌子上的出现次数归零 } } if(q1.head==q1.tail) { printf("小哈win\n小哈当前手中的牌是:"); for(i=q2.head;i<q2.tail;i++) printf(" %d",q2.data[i]);//依次输出小哈手上的牌 printf("\n"); if(s.top==0)//判断栈顶是否为0,从而判断桌子是否还有牌 printf("桌子上没有牌了\n"); else{ printf("桌子上的牌是:"); for(i=1;i<=s.top;i++) printf(" %d",s.data[i]);//依次输出桌子上的牌 printf("\n"); } } else { printf("小哼win\n小哼当前手中的牌是:"); for(i=q1.head;i<q1.tail;i++) printf(" %d",q1.data[i]);//依次输出小哼手上的牌 printf("\n"); if(s.top==0)//判断栈顶是否为0,从而判断桌子是否还有牌 printf("桌子上没有牌了\n"); else{ printf("桌子上的牌是:"); for(i=1;i<=s.top;i++) printf(" %d",s.data[i]);//依次输出桌子上的牌 printf("\n"); } } return 0; } 运行结果: |
|