题目详情:掷骰子 - C/C++ 类与抽象
重要说明:由于本题代码涉及到随机数,因此出题者无法设定固定的答案来评测答题者的程序。所以,出题者在后台设定了一个不同于题面的测试程序,该程序将会观察Dice类所得到的各种数据的一致性及随机性,如果正确,输出Done。
对于答题者而言,请依据上述样例进行本地测试,使得输出结果与下述样例类似即可(具体数值除外):
进一步说明:
```c++
属性int iSides,表示骰子的面数,值固定为6;
函数int rollCount()返回骰子被摇的总次数;
函数int sideCount(int s)返回s点被摇中的总次数,其中,s取值范围为1 ~ 6;
函数int rollDice()返回一个值为1 ~ 6的随机点数;
//题目样例答案
```c++
-------Roll dice for 1000 times------
3, 4, 5, 2, 6, 2, 2, 6, 5, 1, ...
------Statistics of rolling the dice------
Side 1: 158 / 1000 = 15.8%.
Side 2: 156 / 1000 = 15.6%.
Side 3: 161 / 1000 = 16.1%.
Side 4: 175 / 1000 = 17.5%.
Side 5: 165 / 1000 = 16.5%.
Side 6: 185 / 1000 = 18.5%.
我的解答思路和尝试过的方法
首先按照要求先定义Date类里面的成员
class Dice {
public:
static int iSides = 6;
int rollCount();
int sideCount(int s);
int rollDice();
};
然后:
根据原有代码中间
auto rc = d.rollCount();
cout << "Side " << i << ": " << c << " / " << rc
<< " = " << 100.0*c/rc << "%.\n";中间的 100.0*c/rc 部分
以及样例答案Side 6: 185 / 1000 = 18.5%.
推测 rc应该是1000;
那么rollCount();的返回值应该为1000
从而写出
int Dice::rollCount() {
return 1000;
}
的结果
再根据题目要求
函数int sideCount(int s)返回s点被摇中的总次数,其中,s取值范围为1 ~ 6;
从而写出
int Dice::rollDice() {
int N = 1 + rand() % 6;
return N;
}
最后是根据题目要求
函数int rollCount()返回骰子被摇的总次数;
int Dice::sideCount(int s) {
int n = 0;
for (int i = 0; i <= rollCount(); i++) {
if (rollDice() == s)
n++;
}
return n;
}
以下是我代码部分以及运行结果
class Dice {
public:
static int iSides;
int rollCount();
int sideCount(int s);
int rollDice();
};
int Dice::iSides = 6;
int Dice::rollDice() {
int N = 1 + rand() % 6;
return N;
}
int Dice::sideCount(int s) {
int n = 0;
for (int i = 0; i <= rollCount(); i++) {
if (rollDice() == s)
n++;
}
return n;
}
int Dice::rollCount() {
return 1000;
}
但是答案错误