递归,传入参数为未答题同学数k和当前总得分sum
每次一位同学答题后k--,然后有四种选择使总分发生变化,即沿四个分支继续递归
递归终止条件为k==0,此时再判断sum是否为0即可
C语言代码和运行结果如下:
输出为36,数学验证一下,总分为0只可能为:4个同学都选甲题,2对2错;
4个同学都选乙题,2对2错;2个同学选甲题,1对1错,另2个同学选乙题,1对1错
因此答案为:A(4,2)+A(4,2)+A(4,2)=36,结果正确,望采纳~
附源码:
#include <stdio.h>
int ans = 0;
void dfs(int k, int sum) {
if (k == 0) { // 所有人都答题完毕
if (sum == 0)
ans++;
return;
}
dfs(k - 1, sum + 100); // 选择甲题且答对
dfs(k - 1, sum - 100); // 选择甲题且答错
dfs(k - 1, sum + 80); // 选择乙题且答对
dfs(k - 1, sum - 80); // 选择乙题且答错
}
int main() {
dfs(4, 0); // 一共4人,初始得分为0
printf("%d\n", ans);
return 0;
}