华为2015应届生招聘机考体验-杭州站 第2题

来源:互联网 发布:tensorflow哪个版本好 编辑:程序博客网 时间:2024/05/16 18:57
/*
*描述:计算麻将的番数

麻将游戏越来越受到大家喜爱,也在网络上盛行。本题目是给定一组已经和牌的麻将,编写一个函数计算这组麻将的番数。为简化题目,假设麻将只有筒子和条子两种花型,能翻番的规则也只有以下三种,当一组牌中没有下述三种情况中的一种或多种,则这组牌为0番,每种番数是加的关系,例如一组牌既有卡2条又有四归一,则番数为3番。

1.卡2条为一番,即有一局牌是 1条2条3条;

2.四归一为两番,即有4张一样的牌(花色和数字都一样);

3.巧七对为两番,即一组牌恰好是7对牌;

一些约定:

1.一组已经和牌的麻将由多局牌组成,一局牌可以是一对牌、3张连续同样花色的牌、3张一样的牌、4张一样的牌。

2.一组已经和牌一般有14张牌,最多可以有18张牌(当有四归一的时候)。


输入:一字符串表示已经和牌的麻将(由输入者保证,编程人员无需考虑没有和牌),如1T2T3T,4T5T6T,7T8T9T,1D2D3D,4D4D.

说明:1.”1T”表示1条,T表示条子,前面跟数字几表示几条,数据范围1~9,输入者保证,编程无需考虑输入规范性;

2.”4D”表示4筒,D表示筒子,前面跟数字几表示几筒,数据范围是1~9, 输入者保证,编程无需考虑输入规范性;

3.每局牌之间由’,’隔开,输入者保证每局牌都是正确的且按照数字由小到大排序,编程人员无需判断每局牌的正确性;

4.一组牌以’.’号结束,由输入者保证,编程人员无需考虑是否有”.”号。

5.输入保证有番数的牌在一局中,编程人员无需考虑排序,即有番数的牌不会分散在多局牌中。

输出:麻将的番数,整型类型。

思路:
1、将输入的字符串按‘,’进行拆分;
2、对拆分后的每个字符串(一局牌)进行判断,并计算番数;
卡2条,num=1,四归一,num=2,一对,num=3,其他情况,num=0
3、主函数中根据num返回值计算番数
*/



#include<stdio.h>
#include<string.h>

int numStr(char str[]){ //计算一局牌的番数
int num=0;
int len=strlen(str);
int i,j;
if(strcmp(str,"1T2T3T")==0) //卡2条
num=1;

if(len==8){ //四归一
char n=str[0],c=str[1];
for(i=0,j=1;i<len&&j<len;i+=2,j+=2){
if(!(str[i]==n && str[j]==c))
break;
}
num=2;
}

if(len==4){ //一对
if(str[0]==str[2] && str[1]==str[3])
num=3;
}

return num;
}

int main(){
char str[55];
scanf("%s",str);
char strn[10];
int i,j=0;
int len=strlen(str);
int num=0;
int tmp=0,qi=0;
for(i=0;i<len;i++){
if(str[i]!=',' && str[i]!='.'){
strn[j++]=str[i];
}else{
strn[j]='\0';
tmp=numStr(strn);
if(tmp==1 || tmp==2)
num+=tmp;
else{
if(tmp==3)
qi++; //计算对数
}
j=0;
}
}
if(qi==7)
num+=2;
printf("%d\n",num);
return 0;
}
0 0
原创粉丝点击