Member 13079820 Ответов: 2

Как получить случайное число?


всем привет

я пытался получить случайное число от 1 до 9 999 999
используя язык Си, и это, кажется, не работает

Что я уже пробовал:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){
	int i = 0;
	int nombre_aleatoire = 0;
	srand(time(NULL)); 
	for(i=0; i<1; i++){
		nombre_aleatoire = rand()*RAND_MAX/10 - rand()%10000;  
		printf("%d ",nombreMystere);
		
	}
	return 0;
}



это возвращает большие значения в то время как vallues должны находиться в диапазоне от 1 до 9999999

кто-нибудь может помочь ? Спасибо!

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Это легко найти в Google: "C++ случайное число от 0 до 100[^]"

num = (int)(rand() * 9999999) + 1;

Использование оператора " % " для ограничения диапазона имеет побочный эффект генерации более низких значений несколько чаще, чем более высоких.


Member 13079820

#include < stdio.h>
#include <stdlib.h>
#include & lt;time. h>

тап_п(недействительными){
int i = 0;
инт nombre_aleatoire = 0;
srand(time (NULL));
для(i=0; i< 88; i++){
nombre_aleatoire = (int)(rand () * 9999999) + 1;
printf ("%d", nombre_aleatoire);

}
возвращает 0;
}


я попытался изменить значение i (чтобы увидеть больше случайных значений), и оно генерирует отрицательные числа. почему?

Dave Kreskowiak

Прошло много времени с тех пор, как я делал random в C/C++. Все немного изменилось...

Rand () возвращает целое число от 0 до 32767, а не от 0 до 1. Умножьте 32767 на 999999, и вы получите число, которое переполняет int, тем самым давая странные результаты.

В новом коде есть несколько методов возврата диапазона целых чисел, один предвзятый, а другой нет:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <random>

// Define two methods of generating random numbers;
int GetRandomModulo(int min, int max);
int GetRandomModern(int min, int max);

int main()
{
	int i = 0;
	int num = 0;
	srand(time(NULL));

	for (i = 0; i < 88; i++)
	{
		// use

		num = GetRandomModulo(1, 9999999);

		// or 

		num = GetRandomModern(1, 9999999);

		printf("%d\r\n", num);
	}

    return 0;
}

int GetRandomModulo(int min, int max)
{
	int range = max - min + 1;
	int num = rand() % range + min;

	return num;
}

int GetRandomModern(int min, int max)
{
	// This code is should really be wrapped in its own class to
	// prevent constantly reseeding the RNG engine every time it's
	// called.

	// Seed a Mersenne Twister RNG engine
	static std::random_device seed;
	static std::mt19937 engine(seed());
	static std::uniform_int_distribution<int> ditribution(min, max);

	return ditribution(engine);
}

Рейтинг:
1

Patrice T

Цитата:
это возвращает большие значения в то время как vallues должны находиться в диапазоне от 1 до 9999999

Нет, этот код ничего не возвращает, потому что он не компилируется. Показать реальный код.
Похоже, вам нужно изучить rand() функция тоже.

< французский>
rand()*RAND_MAX/10 - rand()%10000

L'utilisation de plusieurs rand () ne rendra pas le resultat plus aléatoire, c'est inutile.
nombreMystere declaré тпас Н Эс данс тонну кода, потому что вызывают ошибка-Де-компиляции.
</; французский>


Member 13079820

#include < stdio.h>
#include <stdlib.h>
#include & lt;time. h>

тап_п(недействительными){
int i = 0;
инт nombre_aleatoire = 0;
srand(time (NULL));
для(i=0; i< 88; i++){
nombre_aleatoire = rand()*RAND_MAX/10-rand ()%10000;
printf ("%d", nombre_aleatoire);

}
возвращает 0;
} * я что-то попробовал и забыл удалить.

мы изучили (например, rand ()%1000), но не с большими значениями
и он не работает с vaalues больше 32747 (rand_max)

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.