1

基本上我必须编写一个程序来生成随机数来模拟一对骰子的滚动。这个程序应该在多个文件中构建。主函数应该在一个文件中,其他函数应该在第二个源文件中,它们的原型应该在头文件中。首先,我编写了一个简短的函数,它返回一个介于 1 和 6 之间的随机值来模拟单个 6 面骰子的滚动。其次,我编写了一个函数,通过调用该函数两次来假装掷出一对骰子。我的程序首先询问用户应该卷多少卷。然后我编写了一个函数来模拟掷骰子多次,准确计算值 2、3、4、5、6、7、8、9、10、11、12 的次数(每个数字是一对骰子的总和)出现在一个数组中。

2    3    4    5    6    7    8    9   10    11    12
*    *    *    *    *    *    *    *    *     *     *
*    *    *    *    *    *    *    *    *     *     *
*    *    *    *    *    *    *    *    *     *     *
*    *    *    *    *    *    *    *    *     *     *
     *    *    *    *    *    *    *    *     *     

接下来,为了查看随机数生成器的性能如何,我编写了一个函数来计算滚动的平均值。将此与 7 的理想平均值进行比较。此外,打印出一个小表格,显示程序制作的每一卷的计数,基于上述频率的理想计数,给定总卷数,以及这些值之间的差异列。到目前为止,这是我不完整的代码:“Compiler Visual Studio 2010”

int rolling(){    //Function that returns a random value between 1 and 6
rand(unsigned(time(NULL)));
int dice = 1 + (rand() %6);
return dice;
}
int roll_dice(int num1,int num2){ //it calls 'rolling function' twice 
int result1,result2;
num1 = rolling();
num2 = rolling();
result1 = num1;
result2 = num2;
return result1,result2;
}
int main(void){
int times,i,sum,n1,n2;
int c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11;//counters for each sum
printf("Please enter how many times you want to roll the dice.\n")
scanf_s("%i",&times);

我假装使用计数器来计算每个总和并将数字(计数)存储在一个数组中。我知道我需要一个循环(for)和一些条件语句(if),但是我的主要问题是从 roll_dice 获取值并将它们存储在 n1 和 n2 中,这样我就可以对它们求和并将总和存储在“sum”中。

4

3 回答 3

5

你可以使用如果你可以使用 C++11 库。

从页面:

uniform_int_distribution<int> one_to_six {1,6};  // distribution that maps to the ints 1..6
default_random_engine re {};                     // the default engine

int x = one_to_six(re); // x becomes a value in [1:6]

你冷种子具有快速移动的时间价值。

std::chrono::time_point<std::chrono::system_clock>
  now {std::chrono::system_clock::now()};
std::chrono::system_clock::duration
  epoch {now.time_since_epoch()};
typedef std::chrono::duration<unsigned long long int, std::milli> ms;

std::default_random_engine re {std::chrono::duration_cast<ms>(epoch).count()};
于 2012-09-18T01:50:41.210 回答
0

制作一个掷骰子的函数并返回总和。

int Roll(int numberOfTimes)
{
     int temp = numberOfTimes;
     int sum = 0;
     int dice1 = 0;
     int dice2 = 0;

     for (int i = 0; < temp; i++)
     {
         dice1 = 1 + (rand() % 6);
         dice2 = 1 + (rand() % 6);
         sum = dice1 + dice2;  
     }

     return sum;
}

我没有对此进行测试,但它可能会有所帮助。

于 2012-09-18T01:45:25.333 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int RollDice()
{
    return rand() % 6 + 1;
}

int main()
{
    int times, i, cont;
    int count[11];

    srand(time(NULL));

    printf("Please enter how many times you want to roll the dice: ");
    scanf("%i", &times);

    if (times <= 0)
    {
         fprintf(stderr, "Invalid value.\n");
         return -1;
    }

    for (i = 0; i < 11; i++)
    {
        count[i] = 0;
    }

    for (i = 0; i < times; i++)
    {
        int result = RollDice() + RollDice();
        if (result < 2 || result > 12)
        {
            fprintf(stderr, "something goes wrong\n");
            return -1;
        }

        ++count[result - 2];
    }

    for (i = 2; i <= 12; i++)
    {
        printf("%3d", i);
    }

    printf("\n");

    while (1)
    {
        cont = 0;

        for (i = 0; i < 11; i++)
        {
            printf("  %c", (count[i] > 0) ? '*' : ' ');
            if (count[i] > 0)
            {
                if (--count[i] > 0)
                {
                    cont = 1;
                }
            }
        }

        printf("\n");

        if (!cont)
        {
            break;
        }
    }

    return 0;
}
于 2012-09-18T03:52:33.400 回答