题面:有n个红球和m个白球,将它们排成一列,要求第一个必须是红球,其余的球要求连续红球不能超过2个,连续白球不能超过3个,问给定n和m的值,输出按要求所能排列出来的总的方法数,如果一种排列方法都找不到,就输出“no”。
思路:创建一个递归函数ball(n,m,r,b);
n纪录红球个数
m纪录白球个数
r纪录红球连续个数
b纪录白球连续个数
#include<bits/stdc++.h>
using namespace std;
int n, m, ans;
void ball(int n, int m, int r, int b) {
if (r > 2)return;
if (b > 3)return;
if (m == 0 && n == 0) {
ans++;
return;
}
if (n > 0)ball(n - 1, m, r + 1, 0);
if (m > 0)ball(n, m - 1, 0, b + 1);
}
int main() {
cin >> n >> m;
ball(n-1, m, 1, 0);
if (ans == 0)cout << "no";
else cout << ans;
return 0;
}