新人考试(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);
   }
}
posted @ 2022-05-19 14:05  _lemonV  阅读(104)  评论(0编辑  收藏  举报