[蓝桥杯2017初赛]拉马车 (string函数的运用)(思路)

这是一个关于两个玩家轮流出牌的游戏模拟程序。每个玩家根据手中牌与桌面牌进行操作,若桌面上有相同牌则抓走并继续出牌,否则将牌放回桌面。游戏结束时,无牌者输。程序通过op函数实现出牌逻辑,main函数负责游戏流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define ll long long
#include<set>
#include<map>
#include<sstream>
using namespace std;
string A,B,C;///A的牌,B的牌,桌上的牌 
bool  op(string &x,string &z) ///x是正在操作的玩家手中的牌, z是桌面上的牌 
{
	if(x.length()==0)
	{
		return false;
	}
	bool ans=true;
	char front=x[0];
	ll i=z.find(front);///返回front在z中的位置下 
	if(i!=string::npos)  //桌上有相同的牌,将这张牌插入x的尾部,并将桌上0~i之间的牌依次插入x的尾部 
	{
	   	x.insert(x.end(),front);
	   	for(int j=0;j<=i;j++)  ///注意,这里值得思考   
	   {
	   		x.insert(x.end(),z[j]);
	   }
	   z.erase(0,i+1); ///从桌面上移除这些牌 
	} 
	else 
	{
		//将这张牌放在桌面上,下标为0 
		z.insert(z.begin(),front);  ///注意,这里值得思考 
		ans=false;
	}
	x.erase(x.begin());
	return ans;
}
int main()
{
   while(cin>>A>>B)
   {
   	C.clear();
   	bool flagA=1;  ///A能出牌的标志 
   bool flagB=0;   ///B能出牌的标志 
   while(1)
   {
      if(flagA)
	  {
	     flagA=op(A,C);///注意:赢的一方可以继续出牌 
		 if(A.length()==0)//A没牌了,则B获胜 
		 {
	        cout<<B<<endl;
			break;	 	
	     }  	
	     flagB=!flagA;
	  }	
	  if(flagB)
	  {
	  	flagB=op(B,C);
	  	if(B.length()==0)
	  	{
	  		cout<<A<<endl;
	  		break;
		 }
		 flagA=!flagB;
	  }
   } 
   }
   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值