新人考试(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);
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值