题意翻译
贝茜喜欢玩棋盘游戏和角色扮演游戏,所以她说服了约翰开车带她去小商店.在那里她买了三个骰子。这三个不同的骰子的面数分别为 s1,s2,s3。
对于一个有 S 个面的骰子每个面上的数字是 1,2,3,…,S。每个面(上的数字)出现的概率均等。贝茜希望找出在所有“三个面上的数字的和”中,哪个和的值出现的概率最大。
现在给出每个骰子的面数,需要求出哪个所有“三个面上的数字的和”出现得最频繁。如果有很多个和出现的概率相同,那么只需要输出最小的那个。
这题还挺人性的,给了hint,这样就容易理解了。
首先定义三个数组存放三个骰子上的数,再定义一个数组存放对应情况的面数和(数组开大点,定义在main函数外面)。
前三个for意思是三个数组分别存放三个骰子上不同的面。
后面三个for就是求和(注意令t作为数组d的元素)。
然后就是基操,找出出现最频繁的面数和。
由于若有相同面数和就输出小的,所以直接找出max即可。
#include<bits/stdc++.h>
using namespace std;
int a[100000],b[100000],c[100000],d[100000]; //存放三个骰子上的数以及数字和
int main()
{
int x,y,z,n,max;
cin>>x>>y>>z;
for(int i=1;i<=x;i++)
a[i]=i;
for(int i=1;i<=y;i++)
b[i]=i;
for(int i=1;i<=z;i++)
c[i]=i;
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
for(int k=1;k<=z;k++)
{
int t; //定义t作为数组d的元素
t=a[i]+b[j]+c[k];
d[t]++;
}
}
}
for(int i=1;i<=10000;i++)
{
if(max<d[i]) //找出出现最频繁的数字和
{
max=d[i];
n=i;
}
}
cout<<n<<endl;
return 0;
}