Все программы из других ответов будут генерировать только так называемые «псевдослучайные числа», которые могут выглядеть случайными для неопытного глаза, но на самом деле следовать некоторому шаблону.
Следующая программа генерирует реальные случайные числа, превращая ваш компьютер в детектор частиц для фонового излучения. Поскольку это основано на квантовых эффектах, это действительно случайно и невозможно предсказать. И для бонуса, программа на самом деле работает быстрее, если вы запускаете компьютер в космос. И да, это так же круто, как кажется.
С
#include<stdio.h>
int main(void)
{
int i,j,k,l,m;
printf("How many random numbers do you want?");
scanf ("%i",&m);
for (i=0; i<m; i++)
{
j = k = 42;
l = 0;
while (j==k)
l++;
printf("%i\n", l);
}
}
Спойлер:
Эта программа генерирует два идентичных фрагмента памяти и затем ждет, сколько времени потребуется фоновому излучению, чтобы изменить один из них. Время ожидания затем возвращается как случайное число, которое будет экспоненциально распределено, если бы не целочисленные переполнения. Такие события, более вероятные в космосе, являются актуальной проблемой в космонавтике, которая решается путем радиационного упрочнения . Таким образом, каждое утверждение во введении в некоторой степени верно, за исключением того, что касается крутости.
К сожалению, такое событие, приводящее к сбою компьютера или, по крайней мере, программы, более вероятно, чем затрагивающее именно эти два фрагмента памяти. Кроме того , это может занять некоторое время ... И, наконец, как отметил kinokijuf, радиационный фон внешний процесс, так j
и k
должно быть помечено как volatile
для компилятора (или вы должны использовать компилятор , который не оптимизирует вообще).
PS:
Развивая идею, можно также создать массив, заполненный нулями, и затем распечатать его. Существует вероятность того, что фоновое излучение изменяет нули между хранением и печатью и, следовательно, то, что печатается, является случайным - ОП никогда не говорил, как должны распределяться случайные числа.