2.3 小猫钓鱼

题目:

两人扑克牌游戏,初始每个人6张手牌,从牌堆顶轮流出牌,放到桌子上,假如出的牌和桌上的牌一样,收走这两张牌和中间的牌。直到一人手牌为空,另一人获胜

代码:

#include<stdio.h>
#include<stdlib.h>

//用来装小哼小哈的手牌
typedef struct queue
{
	int data[1000];
	int head;
	int tail;
}queue;

//用来装桌面牌队
	//这个栈下标是1~10,0被弃用了
typedef struct stack
{
	int data[10];//因为只有1~10十种牌面 
	int top;
}stack;


int main()
{
//声明
	queue q1,q2;
	stack s;
	
	//用来桶装桌面的牌,从而判断是否赢牌
	int book[10];
	int i,t;
	
//初始化
	q1.head=1;q1.tail=1;
	q2.head=1;q2.tail=1;
	s.top=0;//没有-1
	book[10]={0};
	//插眼

//q1小哼入队6张牌
	for(i=1;i<=6;i++)
	{
		scanf("%d",&(q1.data[q1.tail]));
		q1.tail++;
	}
//q2小哈入队6张牌
	for(i=1;i<=6;i++)
	{
		scanf("%d",&(q2.data[q2.tail]));
		q2.tail++;
	}	

//所有人手牌均不为空时执行
	while(q1.head<q1.tail&&q2.head<q2.tail)
	{
		
		//q1小哼准备出队的一张牌是否赢了牌
		t=q1.data[q1.head];
		
			//没有赢:出队,入栈,标记
		if(book[t]==0)
		{
				//出队
			q1.head++;
				//入栈
			s.top++;
			s.data[s.top]=t;
				//标记
			book[t]=1;
			
		}
		
			//赢:出队,入栈,取消标记,出栈,入队
		else
		{
				//出队
			q1.head++;
				//入栈-自己的牌先进
			q1.data[q1.tail]=t;
			q1.tail++;
				//入栈-桌上的牌
			while(s.data[s.top]!=t)
			{
				//	取消标记(顶多2张,现在没了)
				book[s.data[s.top]]=0;
				//入队
				q1.data[q1.tail]=s.data[s.top];
				q1.tail++;
				//出栈
				s.top--;
			}		
		}
		
		
//模仿	//q2小哈准备出队的一张牌是否赢了牌
		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)
			{
				//	取消标记(顶多2张,现在没了)
				book[s.data[s.top]]=0;
				//入队
				q2.data[q2.tail]=s.data[s.top];
				q2.tail++;
				//出栈
				s.top--;
			}
			
		}
	}
//end模仿
		
		if(q2.head==q2.tail)
		{
			printf("q1小哼赢");
		}
		else
		{
			printf("q2小哈赢");
		}
	
	
	
	
	
	
	system("pause");
	return 0;
}

调试:

未知错误,无法理解,能力不够,理解意思即可

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值