私は学校用のサイコロシミュレータを作っていますが、特定の数値が転記された割合を計算する必要があります。テストを実行しましたが、C++で分割しても正しい結果が得られない
How many dice do you want to roll?
3
How many times do you want to roll the dice?
1000000
144414: 1000000 196039 %
これが私のメインクラスのコードです:
#include <iostream>
#include "Dice.h"
#include "DiceSimulator.h"
using namespace std;
static int inputNumber(const string question);
int main(int argc, const char * argv[])
{
int numberOfDice = inputNumber("How many dice do you want to roll?");
const int times = inputNumber("How many times do you want to roll the dice?");
DiceSimulator sim(times, numberOfDice);
cout << sim.howManyTimesDidWeRollACertainNumber(11)
<< ": " << times << " "
<< ((sim.howManyTimesDidWeRollACertainNumber(11) * 100.0)/times)
<< " %" << endl;
return 0;
}
int inputNumber(const string question)
{
int number = 0;
cout << question << endl;
cin >> number;
return number;
}
は、これが私のDiceSimulator.cppです:
#include <iostream>
#include "DiceSimulator.h"
using namespace std;
DiceSimulator::DiceSimulator(const int times, const int numberOfDice)
{
this->numberOfDice = numberOfDice;
int timesRolled[6 * numberOfDice - 2];
Dice dice[numberOfDice];
for(int i = numberOfDice; i <= 6 * numberOfDice; i++)
{
timesRolled[i - numberOfDice] = 0;
}
for(int i = 0; i < times; i++)
{
int roll = 0;
for(int j = 0; j < numberOfDice; j++)
{
roll = roll + dice[j].roll();
}
timesRolled[roll - numberOfDice]++;
}
this->timesRolled = timesRolled;
}
int DiceSimulator::howManyTimesDidWeRollACertainNumber(int number)
{
if(number < numberOfDice || number > numberOfDice * 6)
return 0;
return timesRolled[number - numberOfDice];
}
とT彼はDiceSimulator.h
#include "Dice.h"
#ifndef _3_01_Dice_Simulator_DiceSimulator_h
#define _3_01_Dice_Simulator_DiceSimulator_h
class DiceSimulator
{
int numberOfDice;
int *timesRolled;
public:
DiceSimulator(const int times, const int numberOfDice);
int howManyTimesDidWeRollACertainNumber(int number);
};
#endif
であるあなたは、100を掛け1000000で割っ144414は右、14.4414であると思うだろうか?これが間違った結果をもたらす可能性はありますか?
これは不可能です。真実を実現しようとする:壊れた部分ではないが、それは自分のコードだけである。 –
@KerrekSB:* "真実を実現しようとする" * [Matrix](http://ja.wikipedia.org/wiki/The_Matrix)の小さな子供のように聞こえますか? :P – Nawaz
'sim.howManyTimesDidWeRollACertainNumber(11)'は、呼び出すたびに異なる番号を生成することができますか?おそらくあなたは 'cout'の前に変数に結果を保持しておくべきでしょう。 – Yaniro