测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A40912. 骰子谜题问题描述小明参加了少年宫的一项趣味活动:每个小朋友发给一个空白的骰子(它的6个面是空白的,没有数字), 1.要小朋友自己设计每个面写哪个数字。但有如下要求: 2.每个面只能填写 0 至 8 中的某一个数字。不同面可以填写同样的数字,但 6 个面总和必须等于 24。填好后,小朋友可以用自己填写好数字的骰子向少年宫的两个机器人挑战----玩掷骰子游戏。规则如下:三方同时掷出自己的骰子,如果出…

填空题 困难

题目描述

骰子谜题

问题描述

小明参加了少年宫的一项趣味活动:每个小朋友发给一个空白的骰子(它的6个面是空白的,没有数字),

    1.要小朋友自己设计每个面写哪个数字。但有如下要求:

    2.每个面只能填写 0 至 8 中的某一个数字。

不同面可以填写同样的数字,但 6 个面总和必须等于 24。

填好后,小朋友可以用自己填写好数字的骰子向少年宫的两个机器人挑战----玩掷骰子游戏。规则如下:

三方同时掷出自己的骰子,如果出现任何相同的数字,则三方都不计分。

如果三方数字都不同,则最小数字一方扣 1 分,最大数字一方加 1 分。

小明看到了两个机器人手中的骰子分别是:0 0 0 8 8 8,1 1 4 5 6 7

请你替小明算一下,他如何填写,才能使自己得分的概率最大。

请提交小明应该填写的 6 个数字,按升序排列,数字间用一个空格分开。

如果认为有多个答案,提交字母序最小的那个方案。

参考答案

#include <iostream> using namespace std; int s[6], ans[6], MAX; int s1[6] = {0, 0, 0, 8, 8, 8}; int s2[6] = {1, 1, 4, 5, 6, 7}; void work() { int cnt = 0; for (int i = 0; i < 6; i ++) for (int j = 0; j < 6; j ++) for (int k = 0; k < 6; k ++) if(s[i] > s1[j] && s[i] > s2[k]) cnt ++; if(cnt > MAX) { MAX = cnt; for (int i = 0; i < 6; i ++) ans[i] = s[i]; } } void dfs(int u, int sum) { if(sum > 24) return; if(u == 6) { if(sum == 24) work(); return; } for (int i = 0; i < 9; i ++) { s[u] = i; dfs(u + 1, sum + i); } } int main() { dfs(0, 0); for (int i = 0; i < 6; i ++) cout << ans[i] << " "; return 0; }

答案解析

答案:2 2 2 2 8 8

上一题 下一题