在某个游戏中有一个骰子游戏。在游戏中,你需要投掷 5 个标准六面骰子(骰子为一个正方体,6 个面上分别有1、2、3、4、5、6中的一个数字,骰子的质量均匀),投出的点数根据组合会获得一个“获胜等级”。获胜等级从高到低如下:
- 五个同点数 - 五个骰子显示相同的点数
- 四个同点数 - 四个骰子显示相同的点数
- 葫芦 - 一对和一个三个同点数(如1、1、3、3、3)
- 六高顺子 - 投出的点数为 2、3、4、5、6
- 五高顺子 - 投出的点数为 1、2、3、4、5
- 三个同点数 - 三个骰子显示相同的点数(如1、1、1、2、3)
- 两对 - 投出的点数中有两对是相同的(如 1、1、2、2、3)
- 一对 - 投出的点数有一对是相同的(如 1、1、2、3、4)
- 无 - 除去以上的其他情况
给定你已经投出的一次结果,现在假设你可以选择任意个骰子重投一次,请问怎么样操作,才能最大化在重骰后获得更好的获胜等级的概率呢?
注意:更好的获胜等级需要严格地比当前的获胜等级更好,例如 1、1、2、2、3 如果重骰后变为 1、1、3、3、4 并不比当前的获胜等级更好。
输入格式:
输入第一行是一个正整数 T (1≤T≤10),表示接下来有多少组数据。
每组数据只有一行 5 个数字,表示第一次投出的 5 个骰子的点数。
输出格式:
对于每组数据输出三个整数,其中第一个整数为为了获得最大的概率需要重新骰几个骰子,后面的两个整数为重骰骰子后概率的最简分数,其中第二个整数为分子,第三个整数为分母。如果分子为 0,分母为 1。
如果有多种获得最大概率的情况,取重骰的骰子数最少的方案。
输入样例:
3
1 1 2 2 3
1 1 2 3 4
1 1 1 2 3
输出样例:
3 4 9
3 13 18
2 4 9
样例说明:
样例的第一组数据中,一种方案是:重骰最后三个骰子以获得最大的概率(只要重骰的有一个“1”或者三个均相等即可)。
解析:
手算即可。
代码:文章来源:https://www.toymoban.com/news/detail-580237.html
文章来源地址https://www.toymoban.com/news/detail-580237.html
#include<bits/stdc++.h>
using namespace std;
int n,a[6],cnt[7],res[6],t;
int main(){
cin>>n;
for(int i=0;i<n;i++){
memset(cnt,0,sizeof cnt);
memset(res,0,sizeof res);
for(int j=1;j<=5;j++) cin>>t,cnt[t]++;
for(int j=1;j<=6;j++) res[cnt[j]]++;
if(res[5]==1) cout<<0<<" "<<0<<" "<<1;
else if(res[4]==1) cout<<1<<" "<<1<<" "<<6;
else if(res[3]==1&&res[2]==1) cout<<2<<" "<<11<<" "<<36;
else if(res[1]==5&&cnt[1]==0) cout<<4<<" "<<19<<" "<<324;
else if(res[1]==5&&cnt[6]==0) cout<<1<<" "<<1<<" "<<6;
else if(res[3]==1&&res[1]==2) cout<<2<<" "<<4<<" "<<9;
else if(res[2]==2) cout<<3<<" "<<4<<" "<<9;
else if(res[2]==1&&res[1]==3) cout<<3<<" "<<13<<" "<<18;
else cout<<2<<" "<<17<<" "<<18;
if(i!=n-1) cout<<endl;
}
return 0;
}
到了这里,关于2023Robocom睿抗(本科组省赛)3-筛子游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!