替小明作弊 蓝桥杯

替小明作弊

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个被空格分开的数字。不要写其它附加内容,比如:说明性的文字。

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值