Ref: 《程序员面试宝典》
//递归:打靶10次,求累积和90环的种数/概率
#include<iostream>
using namespace std;
int sum;//count the cases where total score = 90
int store[10];//score 10 score for each shot
void Output()//print the result
{
/*for(int i = 9; i>=0; --i)
cout<<store[i]<<" ";
cout<<endl;*/
++sum;
}
void Comput(int score, int num)//until score = 90
{
if( score<0 || score>(num+1)*10 )//次数num为0-9
return;
if( num == 0 )//last time, Output result
{
store[num] = score;
Output();
return;
}
for ( int i = 0; i<= 10; ++i )
{
store[num] = i;//previous score range [0, 10]
Comput(score - i, num - 1);
}
}
int main()
{
Comput(90, 9);
cout<<"总数: "<<sum<<endl;
return 0;
}
//Result: 92378