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

发布时间:2024年01月22日

题目描述

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

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

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
文章来源:https://blog.csdn.net/s44Sc21/article/details/135756096
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。