新人考试(100分) 有10道2分题..
题一:新人考试(100分)
题目描述
有10道2分题,10道4分题,5道8分题,满分100分,答对得分,答错不得分,累计错三道则停止作答结算分数
输入:最终作答者获得分数 n
输出:作答可能的情况总数 m
public class NC {
// 情况计数
static int count = 0;
//题目的分值数组
static int[] nums = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8};
/**
* @param target 目标扣分值。 例如分值是92 那么target = 100 - 92 = 8
* @param err 错题的数量。答错三体就退出
* @param mark 标记题目是否已经错过了。
*/
public static void dfs(int target, int err, boolean[] mark) {
if (target <= 0 || err == 2) {
if (target == 0) {
count++;
}
return;
}
for (int i = 0; i < nums.length; i++) {
if (mark[i])
return;
mark[i] = true;
//第二个参数要填err+1 我一开始写的 ++err 找了半天不知道结果为什么错。
dfs(target - nums[i], err + 1, mark);
mark[i] = false;
}
}
public static void main(String[] args) {
boolean[] mark = new boolean[25];
dfs(8, 0, mark);
System.out.println(count);
}
}