随机选择0到1之间

时间:2014-12-06 16:35:49

标签: c++ random

这是我创建的功能:

tJugador quienEmpieza(){
    rand()
    tJugador whoStarts = tJugador(rand() % 2); // randomly assigns player
    return whoStarts;

我希望它随机选择0或1。它每次都选择0。一个caculator游戏,应该随机选择玩家Persona或玩家Automata。我只需要帮助弄清楚如何使函数选择0或1.

以下是包含建议更改的整个程序:

#include <iostream>
#include<ctime>
#include<cstdlib>
#include <string>

using namespace std;

const int Meta = 31;
enum tJugador { Automata, Persona };


tJugador quienEmpieza();
tJugador pasalacalculador();

int digitoAleatorio();
int digitoAutomata(int ultimo);

int digitoPersona();
int digitoPersona(int ultimo);

bool mismaFila(int ultimo, int nuevo);
bool mismaColumna(int ultimo, int nuevo);
bool digitoValido(int ultimo, int nuevo);



int main()

{
    std::srand(time(NULL));

    int pasalacalculadora();
    int whoStarts = 0;
    int d = 0;
    int suma;
    suma = 0;
    string nom;
    int ultimo;
    ultimo = 0;
    int x = 0;
    int next = 0;

    cout << "Bienvenido a Pasa La Calculadora!" << endl;
    cout << "Como Te llamas?";
    cin >> nom;
    cout << "Hola:" << nom << endl;
    cout << "Empiezas:";

    if (whoStarts == 0)
    {
        std::cout << "Automata" << endl;


    }
    else if (whoStarts == 1)
    {
        std::cout << "Persona" << endl;

    }


    while ((x != 0) && (suma < Meta)) {

        cout << "Introduce un numero (0 para abandonar): ";
        cin >> d;

        cout << "Suma =" << suma << endl;

        if (whoStarts == Automata){

            d = digitoAutomata(ultimo);
            suma = suma + d;
            ultimo = d;
            next = Persona;
        }

        if (whoStarts == Persona){

            x = digitoPersona();
            suma = suma + x;
            ultimo = x;
            next = Automata;
        }


    }
    cin.sync();
        cin.get();
        system("pause");
        return next;

}



tJugador quienEmpieza(){
    rand();
    tJugador whoStarts = tJugador(rand() % 2); // randomly assigns player
    return whoStarts;
}




int digitoAleatorio(){
    return (rand() % 9) + 1;                                 // randomly assigns a number


    if (quienEmpieza == 0)
    {
        std::cout << "Introduce un digito:" << digitoAleatorio << endl;
        std::cout << ("Suma:") << digitoAleatorio << endl;

    }


}

int digitoAutomata(int ultimo){
    bool validDigit = false;
    int digitoAleatorio = 0;
    int d = 0;

    if (digitoAleatorio == validDigit) {

        (d = true);



        return d;
    }
}


int digitoPersona(){
    int x;
    int whoStarts = 0;

    if (whoStarts == 1)
    {
        cout << "Introduce un numero entre 0 y 9(0 para abandonar): ";
        cin >> x;
    }

    if ((x >= 1) && (x <= 9))

    {
        cout << ("Suma:") << x << endl;
    }
    return x;
}    
}

2 个答案:

答案 0 :(得分:2)

我发现您的方法存在一些问题:

  • 您使用的%3应该从{0,1,2}
  • 中选择一个随机数
  • 您每次调用随机
  • 时都会初始化种子

通常,您应该只初始化一次随机数生成器,然后多次调用rand()。所以我的问题是:您有多少次调用rand()来评估生成的值的分布?

具有随机数的事物是它们是随机的,因此可以有效地调用rand()两次或三次将产生三个连续的0值。最重要的是rand()是一个伪随机数生成器,这意味着它不是随机的,它只是设计看起来是随机的。

要评估结果的分布,您应该生成几千个数字(甚至几十个或几十万个),然后查看0的数量是否大约等于{{1}的数量你得到了。

答案 1 :(得分:-3)

在程序开头使用一次,例如

int main()
{
    srand(time(nullptr));
    // do work
}

我会从更大的频谱中生成数字,例如。 1000并检查数字是奇数还是偶数,从而确定0或1 e.g。

num = rand() % 1000;
if (num % 2 == 0)
    // 0
else
    // 1
// or the other way around
//or simply go
rand() % 2;  // was % 1