本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明参加了少年宫的一项趣味活动:每个小朋友发给一个空白的骰子(它的?
6?个面是空白的,没有数字),要小朋友自己设计每个面写哪个数字。但有如下要求:
填好后,小朋友可以用自己填写好数字的骰子向少年宫的两个机器人挑战----玩掷骰子游戏。规则如下:
三方同时掷出自己的骰子,如果出现任何相同的数字,则三方都不计分。
如果三方数字都不同,则最小数字一方扣? 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;
}
}