void ball(char[] a, int m, int n)
{
if (m + n == 0)
{
输出当前的a的组合
return;
}
if (m > 0)
{
a[m + n - 1] = 'r'; // 放红球
ball(a, m - 1, n);
}
if (n > 0)
{
a[m + n - 1] = 'y'; // 放黄球
ball(a, m, n - 1);
}
}
算法调用是
ball(a, m, n);
亲这个不难,回溯思想,刚写出来的算法,没测试过,应该没错
void output(N,M){
if(N<=0||M<=0)
exit();
for(int i=0;i<=N;i++){
for(int j=0;j<=M;i++){
//输出i个红球,j个黄球
output(N-i,M-j);
}
//一轮成功,换行下一次
}
}
是要个总数,还是要穷举出所有的排法?