蓝桥杯官网填空题(骰子迷题)

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小明参加了少年宫的一项趣味活动:每个小朋友发给一个空白的骰子(它的 

6 个面是空白的,没有数字),要小朋友自己设计每个面写哪个数字。但有如下要求:

  1. 每个面只能填写 0 至  8 中的某一个数字。
  2. 不同面可以填写同样的数字,但 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
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值