2个数字之间的随机数选择器



我正在使用c++开发一种井字游戏,我想知道是否有可能随机化一个数字,但它只能选择2或5。

为了让这些代码块公平地开始,我在用户和计算机之间随机开始:

 srand(time(NULL));
 cout << "The First Person to go is randomly chosen!" << endl;
 FirsttoGo = (rand()%2) + 1;
 cout << "The first move goes to Player: " << FirsttoGo << endl;
 turn = FirsttoGo;

我想添加的功能是,无论谁开始游戏,都可以选择X或O,但如果计算机先开始,计算机应该能够在X或O之间选择。我还为X和O创建了恒定值

static const int O = 5;
static const int X = 2;

有办法吗?

在c++ 11中,对于在一个范围内生成随机数(见下面的代码)有非常好的和更安全的添加:

#include <random>
#include <iostream>
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 2);
    for (int n=0; n<10; ++n) std::cout << dis(gen) << ' ';
    std::cout << 'n';
}

此外,在这个精彩的演讲中,Stephan T. Lavavej说明了为什么使用rand()被认为是有害的。

根据上面的例子,你可以像这样调整它:

int getRandomIDX(int const a = 5, int const b = 2) {
  std::random_device rd;
  std::mt19937 gen(rd());
  std::uniform_int_distribution<> dis(1, 2);
  return (dis(gen) == 1)? a : b;
}
(rand() > RAND_MAX/2) ? 2 : 5;

由于您只需要在两个值之间进行选择,因此您已经可以使用时间函数

time_t timer; 
time(&timer); // it returns an integral value

如果时间timer是偶数选第一个,如果不是选第二个。是真正的随机,而不是伪随机

…我猜是有人讨厌简单之美。使用随机设备和分布在两个值之间进行选择,然后

这是最快和最简单的选择随机号码的方法。2号之间-

srand(time(0));
int t[2]={1,3}; //let two no. be 1 & 2
int l= rand() % (2); //get 0 or 1
cout<<t[l]<<endl;

就是这样。干杯!

最新更新