天天看點

(藍橋杯)牌型種數

問題描述

小明被劫持到X賭城,被迫與其他3人玩牌。

一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。

這時,小明腦子裡突然冒出一個問題:

如果不考慮花色,隻考慮點數,也不考慮自己得到的牌的先後順序

自己手裡能拿到的初始牌型組合一共有多少種呢?

輸出

請輸出該整數,不要輸出任何多餘的内容或說明文字。

思路

遞歸,從A到K選個數,個數選到13時候,總數加一

代碼

#include<bits/stdc++.h>
using namespace std;
//心得:flag==true 是比較,flag=true 是指派  注意等号的個數 
//遞歸思想:由于不論順序,是以假定從A開始選擇個數(0~4)直到 K(13)

int we=0;//we表示種類數 

//n表示每次選擇的dian點的牌的數量
//dian表示牌的點數
//sum為13,即牌每個人發13張  
void my(int n,int dian,int sum){
	//cout<<"執行了一次遞歸"<<endl; 
	sum+=n;	
	if(sum==13){
		we++;
		sum=0;
		return;
	}else if(sum>13){
		return;
	}
	if(dian==13){
		return;
	}
	for(int i=0;i<=4;i++){
		my(i,dian+1,sum); 
	}
	return;
}

int main(){
	int sum=0;//牌數=13 
	int dian=0;//點數<=13 
	my(0,dian,sum);
	cout<<we<<endl;//自己電腦跑完出結果,然後oj平台直接輸出答案 
	//cout<<3598180<<endl;這個是最終的答案 
	return 0;
} 
           

繼續閱讀