华为上机题汇总(六)
注:编译环境为Visual Studio 2012,答案仅供参考。
目录
第二十六题
26.一副牌中发五张扑克牌给你:让你判断数字的组成:
有以下几种情况:
1:四条:即四张一样数值的牌(牌均不论花色)2:三条带 一对
3:三条带两张不相同数值的牌
4:两对
5:顺子 包括 10,J,Q,K,A
6:什么都不是
7:只有一对
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
bool cmp(const int &a, const int &b){
return a > b;
}
int judge(vector<int> v){
sort(v.begin(),v.end());
vector<int> flags(5,0);
auto begin = v.begin();
while (begin != v.end())
{
auto ahead = begin + 1;
while (ahead != v.end() && *ahead == *begin)
{
ahead++;
}
int flag = ahead - begin;
flags.push_back(flag);
begin = ahead;
}
sort(flags.begin(),flags.end(),cmp);
switch (flags[0])
{
case 4:
return 1;
case 3:
switch (flags[1])
{
case 2:
return 2;
case 1:
return 3;
default:
break;
}
break;
case 2:
switch (flags[1])
{
case 2:
return 4;
case 1:
return 7;
default:
break;
}
break;
default:
break;
}
for (int i = 0; i < 4; i++)
{
if (v[i] != v[i+1]-1)
{
return 6;
}
}
return 5;
}
int main()
{
vector<int> v;
string s;
getline(cin,s);
auto begin = s.begin();
while (begin != s.end())
{
auto ahead = begin + 1;
while (ahead != s.end() && *ahead != ' ' && *ahead != ',')
{
ahead++;
}
string tmp(begin,ahead);
int num;