您的位置:首页 > 其它

搜狐2016笔试1 扎金花

2015-09-25 11:28 190 查看
题目意思就是写一个程序判断扎金花输赢。

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

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
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息