其他分享
首页 > 其他分享> > No.2 纸牌-小猫钓鱼

No.2 纸牌-小猫钓鱼

作者:互联网

1.规则:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。【假设牌面只有1~9】

2.分析:

  每个人都有两种操作:出牌和赢牌   <=>  队列的出栈与入栈

  struct queue {int data[100]; int head; int tail;};

  桌面规则:有相同的牌,则两张牌及其之间的牌面全部出栈,并给赢牌的一方入栈,此处用栈

  struct stack {int data[10]; int top;}

 

struct queue{
int data[100];
int head;
int tail;
};

struct stack{
int data[100];
int top;
};
struct stack s;

struct queue push_card(){ //发牌
struct queue q;
int n,i;
printf("开始发牌:");

scanf("请输入牌数%d",&n);
for (i=1;i<=n;i++){
scanf("%d",&q.data[q.tail]);
q.tail++;
}
return q;
}

void play_card(queue q){
int top, i, book[10];

for (i=1;i<=10;i++){
book[i]=0;
}
//出牌
if (book[q.head]==0){
s.top++;
s.data[s.top]=book[q.head];
q.head++;
}
if (book[q.head]==1){
q.head++;
q.data[q.tail]=book[q.head];
q.tail++;
while(s.data[s.top]!=book[q.head]){
q.data[q.tail]=s.data[s.top];
q.tail++;
s.top--;
}
}
}

void who_win(){
struct queue q;
int i;
if (q.head == q.tail){
printf("小哈赢");
for (i=q.head;i<=q.tail-1;i++)
printf("%d ",q.data[i]);
if (s.top>0){
printf("%d ",s.data[s.top]);
s.top--;
}
else
printf("table is clear");
}
}

int main(){
struct queue q1, q2;
struct stack s;
int i,n,t,flag;
int top;

//初始化指针
q1.head=1;q1.tail=1;
q2.head=1;q2.tail=1;
s.top=0;
flag = 0;

//发牌

//谁赢谁输?
while(q1.head //出牌循环
}
// who win

标签:head,小猫,struct,纸牌,int,top,tail,No.2,data
来源: https://www.cnblogs.com/yalimy/p/14985739.html