问题描述
【题目描述】
【输出】
题目解析
迭代13张牌
这种方法先抓一张牌,再抓一张,当当前牌数大于4时就不可以再次抓取该种牌,直到抓取十三张为止。在考场中这种方法很容易想到,但是运算量是13!,一般情况下需要运算很长时间。
迭代各种牌的张数(巧妙)
定义每种牌被抓取的数量为0,1,2,3,4,比如牌1已经抓了4张迭代到f(1,4),再次迭代就是f(2,4),当迭代到f(13,13)时表示迭代到第13种牌型且当前牌数已经是13张了。如果还不明白再举个例子,牌1抓4张,牌二抓3张,牌三不抓,牌四牌五牌六各2张,则这个序列就是4 3 0 2 2 2 0 0 0 0 0 0 0。
C++代码
#include<bits/stdc++.h>
using namespace std;
int ans=0;
void f(int k,int cnt)
{
if(cnt>13||k>13) return;
if(k==13&&cnt==13) //13种牌全部迭代完且当前牌的总数是13
{
ans++;
return;
}
for(int i=0;i<5;i++)
{
f(k+1,cnt+i); //迭代下一种牌
}
}
int main()
{
f(0,0); //1表示牌1,0表示牌数为0
cout<<ans<<endl;
return 0;
}