题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明参加了少年宫的一项趣味活动:每个小朋友发给一个空白的骰子(它的
6 个面是空白的,没有数字),要小朋友自己设计每个面写哪个数字。但有如下要求:
- 每个面只能填写 0 至 8 中的某一个数字。
- 不同面可以填写同样的数字,但 6 个面总和必须等于 24 。
填好后,小朋友可以用自己填写好数字的骰子向少年宫的两个机器人挑战----玩掷骰子游戏。规则如下:
三方同时掷出自己的骰子,如果出现任何相同的数字,则三方都不计分。
如果三方数字都不同,则最小数字一方扣 1 分,最大数字一方加 1 分。
小明看到了两个机器人手中的骰子分别是:
0 0 0 8 8 8 1 1 4 5 6 7
请你替小明算一下,他如何填写,才能使自己得分的概率最大。
请输出小明应该填写的 6 个数字,按升序排列,数字间用一个空格分开。
如果认为有多个答案,提交字母序最小的那个方案。
运行限制
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {static int[] j1=new int[] {0,0,0,8,8,8};static int[] j2=new int[] {1,1,4,5,6,7};static int[] a=new int[6];static int[] b=new int[6];static int ans=0;static int max=Integer.MIN_VALUE;public static void main(String[] args) {dfs(0,0);for(int i=0;i<5;i++) {System.out.printf(b[i]+" ");}System.out.print(b[5]);}public static void dfs(int n,int sum) {if(sum>24) {return;}if(n>5) {int count = 0;if(sum==24) {count=game();}if(count>max) {max=count;for(int i=0;i<6;i++) {b[i]=a[i];}}return;}for(int i=0;i<=8;i++) {a[n]=i;dfs(n+1,sum+i);}}public static int game() {int ans=0;for(int i=0;i<6;i++) {for(int j=0;j<6;j++) {for(int k=0;k<6;k++) {if(a[k]>j1[i]&&a[k]>j2[j]) {ans++;}if(a[k]<j1[i]&&a[k]<j2[j]) {ans--;}}}}return ans;}
}
-
- 最大运行时间:1s
- 最大运行内存: 128M