天天看點

給麻将遊戲算番數

麻将遊戲越來越受到大家喜愛,也在網絡上盛行。本題目是給定一組已經和牌的麻将,編寫一個函數計算這組麻将的番數。

為簡化題目,假設麻将隻有筒子和條子兩種花型,能翻番的規則也隻有以下三種,當一組牌中沒有下述三種情況中的一種或多種,

則這組牌為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.輸入保證有番數的牌在一局中,程式設計人員無需考慮排序,即有番數的牌不會分散在多局牌中。

輸出:

麻将的番數,整型類型。

樣例輸入:

1T2T3T,4T5T6T,7T8T9T,1D2D3D,4D4D.

樣例輸出:

1答案提示:

隻輸出番數,且為整型。

這是一道華為機試題,由于大部分難題在輸入判斷,而題中聲明無需判斷,是以其實是一道比較簡單的題目,有問題大家一起交流一下。

代碼如下:

#include "stdafx.h"
#include<iostream>
#include<string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	char cards[50] ; 
	cout<<"請輸入你的手牌:"<<endl;
	cin>>cards;
	char heap[10];
	int j=0;
	int pair = 0;
	int sum=0;
	for(int i =0;i<strlen(cards);i++) {
		j=0;
		memset(heap,'\0',10);
		while (cards[i]!=','&&cards[i]!='.') {
			heap[j++] = cards[i++];
		}
		//1.卡2條為一番,即有一局牌是 1條2條3條;
		if (strcmp(heap,"1T2T3T")==0){
			sum+=1;
		}
		//2.四歸一為兩番,即有4張一樣的牌(花色和數字都一樣);
		if(strlen(heap)==8) {
			sum+=2;
		}
		//3.巧七對為兩番,即一組牌恰好是7對牌;
		if(strlen(heap)==4) {
			pair++;
		}
	}
	if(pair==7) {
		sum+=2;
	}
	cout<<sum;
	system("PAUSE");
	return 0;
}
           

繼續閱讀