De acuerdo, en primer lugar, en su ejemplo, la declaración if es la menor de sus preocupaciones.
Para la computadora, si las declaraciones son a la velocidad del rayo. Generación de números aleatorios, sin embargo, no lo es.
Si está trabajando en C ++, una forma de hacerlo sería usar std :: rand () o algún otro generador de números aleatorios.
std :: rand () (para el cual necesita #incluir ) le dará un número entero aleatorio entre 0 y RAND_MAX (un número muy grande).
- La ecuación [matemáticas] x ^ 2 + kx + 8 = k [/ matemáticas] no tiene soluciones reales para x. ¿Cuál es el mayor valor entero posible para k?
- ¿Es [matemática] 10 ^ n + 1 [/ matemática] siempre compuesta cuando [matemática] n [/ matemática] es un número entero mayor que dos?
- Deje [math] p [/ math] ser un número primo impar y [math] \ zeta = \ zeta_p = \ cos \ left (\ frac {2 \ pi} {p} \ right) + i \ sin \ left (\ frac {2 \ pi} {p} \ right) [/ math]. ¿Cómo haces lo siguiente?
- ¿Qué es un algoritmo para encontrar el número N de base 10 más pequeño, mayor que la entrada, de modo que N se escriba con todos los 1 y 0 y la entrada sea un factor de N?
- Dado un polinomio secreto con coeficientes enteros posiblemente negativos, y la capacidad de consultar el valor del polinomio en cualquier número entero, ¿qué tan eficientemente se puede calcular el polinomio exacto?
Si desea obtener un número aleatorio entre cero y cualquier número entero dado, puede hacer std :: rand ()% n, que le dará cualquier número hasta n, no incluido.
Entonces este es un comienzo. std :: rand ()% 2 te dará 0 o 1. ¡Pero necesitas -1 o 1!
Para solucionar esto, podemos tomar el resultado, multiplicarlo por dos y restar uno. De esta manera, 0 se convertirá en 0 * 2-1 = -1 y 1 se convertirá en 1 * 2-1 = 1
En resumen, una forma de hacerlo sería x = (std :: rand ()% 2) * 2-1;
Sin embargo, esta no es una respuesta muy satisfactoria. Quiero decir, funciona, pero podría ser mejor. Probemos algo mas
Si queremos obtener 0 o 2 (para poder restar 1 para obtener los números que desea), simplemente podemos hacer un simple truco binario.
Si observamos la representación binaria de un número aleatorio, es algo así como 00101110 (muchos bits no incluidos)
Si tomamos * solo * el segundo bit de la derecha, obtendremos 00000010 o 00000000. ¡Esto es dos o cero! Entonces, solo podemos restar uno.
Esto puede sonar complicado y todo, pero todo lo que necesita hacer es usar el operador AND bit a bit y obtener:
x = std :: rand () & 2 – 1;
¡Y hecho!
Como nota al margen, recomendaría buscar la documentación de std :: rand, ya que tiene algunas peculiaridades. Por ejemplo, para que sus números no sean predecibles, deberá inicializar una semilla usando std :: srand ()