替小明作弊
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 26 Accepted Submission(s) : 15
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
小明参加了少年宫的一项趣味活动:每个小朋友发给一个空白的骰子(它的6个面是空白的,没有数字),要小朋友自己设计每个面写哪个数字。但有如下要求:
1. 每个面只能填写 0 至 8 中的某一个数字。
2. 不同面可以填写同样的数字,但6个面总和必须等于24。
填好后,小朋友可以用自己填写好数字的骰子向少年宫的两个机器人挑战----玩掷骰子游戏。规则如下:
三方同时掷出自己的骰子,如果出现任何相同的数字,则三方都不计分。
如果三方数字都不同,则最小数字一方扣 1 分,最大数字一方加 1 分。
小明看到了两个机器人手中的骰子分别是:
0 0 0 8 8 8 1/2
1 1 4 5 6 7 k n/6
请你替小明算一下,他如何填写,才能使自己得分的概率最大。
请提交小明应该填写的6个数字,按升序排列,数字间用一个空格分开。
如果认为有多个答案,提交字母序最小的那个方案。
注意:只提交一行内容,含有6个被空格分开的数字。不要写其它附加内容,比如:说明性的文字。
1. 每个面只能填写 0 至 8 中的某一个数字。
2. 不同面可以填写同样的数字,但6个面总和必须等于24。
填好后,小朋友可以用自己填写好数字的骰子向少年宫的两个机器人挑战----玩掷骰子游戏。规则如下:
三方同时掷出自己的骰子,如果出现任何相同的数字,则三方都不计分。
如果三方数字都不同,则最小数字一方扣 1 分,最大数字一方加 1 分。
小明看到了两个机器人手中的骰子分别是:
0 0 0 8 8 8 1/2
1 1 4 5 6 7 k n/6
请你替小明算一下,他如何填写,才能使自己得分的概率最大。
请提交小明应该填写的6个数字,按升序排列,数字间用一个空格分开。
如果认为有多个答案,提交字母序最小的那个方案。
注意:只提交一行内容,含有6个被空格分开的数字。不要写其它附加内容,比如:说明性的文字。
Input
无
Output
输出按升序排列的6个数字,数字间用空格分隔
Author
njtechliubin
这道题想着暴力穷举就好了,没想到自己做暴力题都会写错,总共也就6^3种可能,
再对于每种可能看他赢分的次数,次数最多就是答案。
#include<iostream>
using namespace std;
int ans[6];
int robot[6] = { 1,1,4,5,6,7 };
int robot2[6] = { 0,0,0,8,8,8 };
double win = 0;
double res = 0;
void dfs(int n,int sum) {
if (n == 6&&sum==24) {
win = 0;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
for (int k = 0; k < 6; k++) {
if (ans[i] > robot[j] && ans[i] > robot2[k]) {
win += 1;
}
}
}
}
if (win >res) {
res = win;
cout << res << endl;
for (int i = 0; i < 6; i++)
cout << ans[i];
cout << endl;
}
return;
}
if (n > 6)
return;
for (int i = 0; i <= 8; i++) {
if (sum + i <= 24) {
ans[n] = i;
dfs(n + 1, sum + i);
}
}
}
int main()
{
dfs(0, 0);
return 0;
}