c++ - 如何用不那么繁琐的方式统计一个随机数产生的次数?

标签 c++ random

如果一个程序应该模拟掷骰子,并掷骰子任意给定的次数。如何编写代码,以便它可以计算一个数字被滚动的次数?我在下面有一个代码,但我认为这是完成此任务的一种乏味且丑陋的方法。我认为有更好的方法可以做到这一点,也许是一个非常简单的代码。 这是代码:

#include <iostream>
#include <ctime>

int main(int argc, const char * argv[]) {
    int roll, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0, i, roll_times = 0;
    std::cout << "How many times do you want to roll the dice?" << std::endl;
    std::cin >> roll_times;
    srand(unsigned(time(NULL)));
    for(i = 0; i < roll_times; i++) {
        roll = rand() % 6 + 1;
        switch(roll) {
            case 1:
                s1++;
                break;
            case 2:
                s2++;
                break;
            case 3:
                s3++;
                break;
            case 4:
                s4++;
                break;
            case 5:
                s5++;
                break;
            case 6:
                s6++;
                break;
        }
    }
    std::cout << "The number 1  was rolled " << s1 << " times." << std::endl;
    std::cout << "The number 2  was rolled " << s2 << " times." << std::endl;
    std::cout << "The number 3  was rolled " << s3 << " times." << std::endl;
    std::cout << "The number 4  was rolled " << s4 << " times." << std::endl;
    std::cout << "The number 5  was rolled " << s5 << " times." << std::endl;
    std::cout << "The number 6  was rolled " << s6 << " times." << std::endl;
    return 0;
}

最佳答案

您可以使用包含 6 个整数的数组来代替单个变量。然后使用第一个 for 循环中的索引来设置计数。同样的想法可以应用到屏幕上的输出。

int main(int argc, const char * argv[]) {
    int roll, i, roll_times = 0;
    int dice[6] = {0};
    cout << "How many times do you want to roll the dice?" << endl;
    cin >> roll_times;
    srand(unsigned(time(NULL)));
    for(i = 0; i < roll_times; i++) 
    {
        roll = rand() % 6;
        dice[roll]++;
    }
    for(int k = 1; k <= 6; k++)
    {
        cout << "The number " << k << " was rolled " << dice[k-1] << " times." << endl;
    }
    return 0;
}

关于c++ - 如何用不那么繁琐的方式统计一个随机数产生的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27970387/

相关文章:

c++ - 在 64 位机器 (c/c++) 上编程有什么需要注意的地方吗?

c++ - 试图制作一个 C++ 程序将 4 位八进制数转换为十进制数

Python 洗牌使得位置永远不会重复

c++ - 如何在 C++ 中生成负随机整数

c++ - Mersenne Twister 种子没有效果

string - 没有时间生成随机字符串?

c++ - 为什么我的循环没有按我的预期工作?

c++ - 预处理器、汇编器和链接器是编译器的一部分吗?

c++ - 将字符串转换为 double 型,然后将其插入 While 循环中的 vector

java - 保持 SecureRandom (SHA1PRNG) 种子 secret - 在播种前计算哈希值?