Wszystkie programy z innych odpowiedzi wygenerują tylko tak zwane „liczby pseudolosowe”, które mogą wyglądać losowo dla niewprawnego oka, ale w rzeczywistości mają pewien wzór.
Poniższy program generuje rzeczywiste liczby losowe, zamieniając komputer w detektor cząstek emitujący promieniowanie tła. Ponieważ jest to oparte na efektach kwantowych, jest to naprawdę losowe i niemożliwe do przewidzenia. Aby uzyskać bonus, program faktycznie działa szybciej, jeśli uruchomisz komputer w kosmos. I tak, to jest tak samo fajne, jak się wydaje.
do
#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);
}
}
Spojler:
Ten program generuje dwa identyczne fragmenty pamięci, a następnie czeka, ile czasu zajmie promieniowanie tła, aby zmienić jeden z nich. Czas oczekiwania jest następnie zwracany jako liczba losowa, która byłaby wykładniczo rozłożona, gdyby nie przepełnienie liczb całkowitych. Takie zdarzenia, które są bardziej prawdopodobne w kosmosie, stanowią rzeczywisty problem w astronautyce, który rozwiązuje się za pomocą utwardzania promieniowaniem . Tak więc każde stwierdzenie we wstępie jest do pewnego stopnia prawdziwe, z wyjątkiem trochę o chłodzie.
Niestety, takie zdarzenie powodujące awarię komputera lub przynajmniej programu jest bardziej prawdopodobne niż wpływa dokładnie na te dwie części pamięci. Ponadto, może minąć trochę czasu ... W końcu, jak podkreślił kinokijuf, promieniowanie tła jest procesem zewnętrznym, tak j
i k
powinna być oznaczona jakovolatile
do kompilatora (lub należy użyć kompilatora, że nie optymalizuje w ogóle).
PS:
Rozwijając ten pomysł, można również po prostu utworzyć tablicę wypełnioną zerami, a następnie wydrukować ją. Istnieje prawdopodobieństwo, że ε promieniowanie tła zmieni zera między przechowywaniem a drukowaniem, a zatem to, co jest drukowane, jest losowe - OP nigdy nie powiedział, w jaki sposób mają być rozmieszczone liczby losowe.