搜狐2016笔试1 扎金花

题目意思就是写一个程序判断扎金花输赢。

以下是个人自己写的,运行正常,楼主水水一名如有错误请指教:

vs2010正常运行

#include <iostream>
using namespace std;

#define N 20
#define M 5

#define PrintCode(nRet)     if(nRet){ cout<<"#code  : "<<nRet<<endl;return nRet;};

class Player
{
public:
	Player():m_nPri(0)
	{
		for(int i = 0 ;i<3;i++)
		{
			m_nNum[i] = 0;
			m_bFlag[i] = false;
		}
	}

	int MySort()
	{
		int temp;
		for(int i = 0;i<3;i++)
		{
			for(int j = i+1;j<3;j++)
			{
				if(m_nNum[i]<m_nNum[j])
				{
					temp = m_nNum[i];
					m_nNum[i] = m_nNum[j];
					m_nNum[j] = temp;
				}
			}
		}
		return 0;
	}

	int SetPri()
	{
		int nRet = 0;
		nRet = MySort();
		if(nRet)
		{
			return nRet;
		}
		if(m_nNum[0] == m_nNum[1]&&m_nNum[1]==m_nNum[2])
		{
			m_nPri = 3;
			for(int i = 0;i<3;i++)
			{
				m_bFlag[i] = true;
			}
			return nRet;
		}
		if(m_nNum[0]-m_nNum[1] == 1&&m_nNum[1] - m_nNum[2] == 1)
		{
			m_nPri = 2;
			return nRet;
		}
		if(m_nNum[0] == m_nNum[1]||m_nNum[1] == m_nNum[2])
		{
			m_nPri = 1;
			if(m_nNum[0] == m_nNum[1])
			{
				m_bFlag[0] = true;
				m_bFlag[1] = true;
			}
			if(m_nNum[1] == m_nNum[2])
			{
				m_bFlag[1] = true;
				m_bFlag[2] = true;
			}
			return nRet;
		}

		return nRet;
		
	}
public:
	int m_nPri;//优先级
	int m_nNum[3]; 
	bool m_bFlag[3];
};

 int pickup(int &nRet,Player* player,char* temp)
 {
	 int k = 0;
	 int m_nNumLen = 0;
	 int playerNum = 0;
	 bool flagout = false;
	 while(true)
	 {
		 if(flagout)
		 {
			 break;
		 }
		 switch(temp[k])
		 {
		 case '\0':
			 flagout = true;
			 break;
		 case ' ':
			 playerNum++;
			 m_nNumLen = 0;
			 break;
		 case '0':
			 if(temp[k-1]=='1')
			 {
				break;
			 }
			 else
			 {
				 nRet = -2;
				 return 0;
			 }
			 ;
		 case '1':
			 if(temp[k+1] == '0')
			 {
				 player[playerNum].m_nNum[m_nNumLen++] = 10;
				 break;
			 }
			 else
			 {
				 nRet = -2;
				 return 0;
			 }
			
		 case '2':
			 player[playerNum].m_nNum[m_nNumLen++] = 2;
			 break;
		 case '3':
			 player[playerNum].m_nNum[m_nNumLen++] = 3;
			 break;
		 case '4':
			 player[playerNum].m_nNum[m_nNumLen++] = 4;
			 break;
		 case '5':
			 player[playerNum].m_nNum[m_nNumLen++] = 5;
			 break;
		 case '6':
			 player[playerNum].m_nNum[m_nNumLen++] = 6;
			 break;
		 case '7':
			 player[playerNum].m_nNum[m_nNumLen++] = 7;
			 break;
		 case '8':
			 player[playerNum].m_nNum[m_nNumLen++] = 8;
			 break;
		 case '9':
			 player[playerNum].m_nNum[m_nNumLen++] = 9;
			 break;
		 case 'J':
			 player[playerNum].m_nNum[m_nNumLen++] = 11;
			 break;

		 case 'Q':
			 player[playerNum].m_nNum[m_nNumLen++] = 12;
			 break;

		 case 'K':
			 player[playerNum].m_nNum[m_nNumLen++] = 13;
			 break;
		 case 'A':
			 player[playerNum].m_nNum[m_nNumLen++] = 14;
			 break;
		 default:
			 nRet = -2;
			 return 0;
		 }
		 k++;
	 }
	 return 0;
 }

 /*inline void PrintCode(int nRet)
 {
	 if(nRet)
	 {
		 cout<<"#code  : "<<nRet<<endl;
	 }
 }*/

 inline void judge(int a,int b)
 {
	 int result = 0;
	 if(a>b)
	 {
		result = 1;
		cout<<result<<endl;
	 }
	 if(a<b)
	 {
		 result = -1;
		 cout<<result<<endl;
	 }
 }

 int WinOrNot(Player* player)
 {
	 int result;
	 if(player[0].m_nPri>player[1].m_nPri)
	 {
		 result = 1;
		 cout<<result<<endl;
	 }
	 if(player[0].m_nPri<player[1].m_nPri)
	 {
		 result = -1;
		 cout<<result<<endl;
	 }
	 if(player[0].m_nPri == player[1].m_nPri)
	 {
		 switch(player[0].m_nPri)
		 {
		 case 0 :
			 if(player[0].m_nNum[0]!=player[1].m_nNum[0])
			 {
				 judge(player[0].m_nNum[0],player[1].m_nNum[0]);
			 }
			 else
			 {
				 if(player[0].m_nNum[1]!=player[1].m_nNum[1])
				 {
					 judge(player[0].m_nNum[1],player[1].m_nNum[1]);
				 }
				 else
				 {
					 if(player[0].m_nNum[2]!=player[1].m_nNum[2])
					 {
						 judge(player[0].m_nNum[2],player[1].m_nNum[2]);
					 }
					 else
					 {
						 result = 0;
						 cout<<result<<endl;
					 }
				 }
			 }
			 break;
		 case 1:
			 if(player[0].m_nNum[1]!=player[1].m_nNum[1])
			 {
				 judge(player[0].m_nNum[1],player[1].m_nNum[1]);
			 }
			 else
			 {
				 int a;
				 int b;
				 for(int i = 0;i<3;i++)
				 {
					 if(player[0].m_bFlag[i] == false)
					 {
						 a = player[0].m_nNum[i];
					 }
				 }
				 for(int i = 0;i<3;i++)
				 {
					 if(player[1].m_bFlag[i] == false)
					 {
						 b = player[1].m_nNum[i];
					 }
				 }
				 if(a!=b)
					 judge(a,b);
				 else
				 {
					 result = 0;
					 cout<<result<<endl;
				 }
			 }
			 break;

		 case 2:
			 if(player[0].m_nNum[0]!=player[1].m_nNum[0])
			 {
				 judge(player[0].m_nNum[0],player[1].m_nNum[0]);
			 }
			 else
			 {
				 result = 0;
				 cout<<result<<endl;
			 }
			 break;
		 case 3:
			 if(player[0].m_nNum[0]!=player[1].m_nNum[0])
			 {
				 judge(player[0].m_nNum[0],player[1].m_nNum[0]);
			 }
			 else
			 {
				 result = 0;
				 cout<<result<<endl;
			 }
			 break;
		 }
	 }
	 return 0;
 }

int main()
{
	Player player[2];
	char temp[N];
	int result;
	int nRet = 0;
	
	cin.getline(temp,N);
	nRet = pickup(result,player,temp);
	PrintCode(nRet);
	if(result == -2)
	{
		cout<<result<<endl;
		return nRet;
	}
	nRet = player[0].SetPri();
	PrintCode(nRet);
	nRet = player[1].SetPri();
	PrintCode(nRet);

	nRet = WinOrNot(player);
	PrintCode(nRet);

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有啥问啥

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值