【问题标题】:Randomly pick a number between 0 and 8 one by one until there is no number left to pick, then start over随机选择一个0到8之间的数字,直到没有数字可以选择,然后重新开始
【发布时间】:2014-01-30 17:20:51
【问题描述】:

我不是真正的程序员。我边走边学。 我对 C++ 不够熟悉,无法确切知道该怎么做,所以我在这里问:

我想要一个从 0 到 8 随机选择一个数字的逻辑。 一旦选择了一个数字,在程序遍历从 0 到 8 的所有数字之前,不应再次选择它。 然后,一旦消除了所有数字,程序就会“重置”数字列表并无休止地重新启动相同的过程。

我知道我可能需要做一个枚举(因为我会将其他变量与这些数字相匹配)但我不确定我将如何设置这个程序。

【问题讨论】:

  • 您正在寻找的是“随机洗牌”。
  • 创建一个从0到8的数字数组,随机打乱数组,然后依次遍历。

标签: c++ list random enums numbers


【解决方案1】:

您可以使用以下值创建向量:{0,1,2,3,4,5,6,7,8}

然后如果一个for循环{

选择一个介于1和vector.length()之间的随机数N(或者大小,我不记得名字了)

选择向量[N-1] 并从向量中删除第 N-1 个元素。

}

【讨论】:

    【解决方案2】:

    您正在寻找的是从 0 到 8 随机打乱一个数字列表,按顺序打印出来,然后再做一遍。例如:

    #include <algorithm>
    #include <iostream>
    #include <vector>
    
    int main() {
        while (true) {
            std::vector<int> nums {0, 1, 2, 3, 4, 5, 6, 7, 8};
            std::random_shuffle(nums.begin(), nums.end());
            for (auto num : nums) {
                std::cout << num << " ";
            }
            std::cout << "\n";
            // some kind of continuation detection
        }
        return 0;
    }
    

    【讨论】:

    • ...然后当你把它们全部打印出来后,再次随机播放它们。
    • @JerryCoffin 这就是 while 循环的用途
    • 对——我只是在评论你描述的第一句话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2016-02-20
    • 1970-01-01
    • 2018-03-24
    • 2014-08-19
    • 2018-02-16
    • 2017-05-01
    相关资源
    最近更新 更多