抽籤 遞歸【藍橋杯真題】(c++實現)

抽籤

X星球要派出一個5人組成的觀察團前往W星。

其中:

A國最多可以派出4人
A國最多可以派出4人
A國最多可以派出4人
。。。

那麼最終派往W星的觀察團會有多少種國別的不同組合呢?

輸入格式
第一行N,以下N行代表N個國家最多可派出人數Ai。
輸出格式
最多多少種派法ANS,ANS爲一個整數。
輸出規模
1<N<10000
1<AI<10000
示例輸入
6
4
2
2
1
1
3
示例輸出
101

我的思路

  • 本題思路理解:X星球N個國家,每個國家都可以派出人數,但是不能派出大於最多人數的人數並且不能派出大於5的數,求所有國家按此規範派出人數會產生多少種組合。
  • 可以使用暴力破解判斷所有組合,然而比賽時需要節省時間,所以使用遞歸(本題參考藍橋學苑2016屆B組試題,個人檢查無誤,本地運行有誤)。

算法展示

#include <iostream>
using namespace std;
int a[10000],N,i,ans = 0;
void findAns(int a[],int start,int An)//國家可派出數組a,當前派出第start國家,已經組合An人 
{
	if(start == N)//找到最後一個國家後 
	{
		if(An == 5) ans++;//如果組合人數An等於派出人數5; 
		return;	
	}

	for(i = 0;i<=a[start];i++)//派出第n個國家人數的人數,需檢查人數是否滿足規範 
	{
		findAns(a,start+1,An+i);//查找下一個國家,記錄已經組合數An
	}	
}
int main()
{
	//輸入規模及數據 
	cin>>N;	
	for(i = 0;i < N;i++)
	{
		cin>>a[i];
	}
	findAns(a,0,0); 
	
	cout<<ans<<endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章