這是我正在學習的一本書中的一個程式。我不明白這個程式如何跟蹤已經被占用的數字。這本書很簡潔,我不明白他們的解釋。有人可以幫我更好地理解這段代碼的細節嗎?特別是代碼注釋中指出的部分。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const int maxrange = 49;
const int maxballs = 6;
int rnd(int range);
void seedrnd(void);
int main()
{
int numbers[maxrange];
int i, b;
printf("L O T T O Z I E H U N G E N\n");
seedrnd();
for (i = 0; i < maxrange; i )
{
numbers[i] = 0;
}
printf("Drueken sie eingabe fuer die Zahlen dieser Woche: ");
getchar();
printf("Es geht los\n");
//This is the part I am stuck at: where the numbers in the array
//are checked to see if the number has been used
for (i = 0; i < maxballs; i );
{
do
{
b = rnd(maxrange);
} while (numbers[b - 1]);
numbers[b - 1] = 1;
printf("%i ", b);
}
printf("\n\nViel Glueck\n");
return 0;
}
int rnd(int range)
{
int r;
r = rand() % range 1;
return (r);
}
void seedrnd(void)
{
srand((unsigned)time(NULL));
}
uj5u.com熱心網友回復:
回圈的目的是確保您獲得maxballs唯一的數字。這是通過使用陣列numbers“記住”已經使用過的數字來完成的。
思路如下。
首先numbers用零填充陣列。
然后選擇一個亂數。例如 2.while (numbers[b - 1]);停止因為numbers[1]為零。
然后numbers[1]在這里設定為 1numbers[b - 1] = 1;
然后選擇下一個亂數。如果它再次應該是 2,它將被拒絕,因為現在numbers[1]不為零,因此while (numbers[b - 1]);將導致選擇另一個亂數。
通過這種方式,您將獲得maxballs唯一的數字。
正如@ikegami 所評論的,值得一提的是,生成唯一數字隨機序列的更好方法是 Fisher-Yates shuffle。在此處閱讀更多資訊:https : //en.wikipedia.org/wiki/Fisher–Yates_shuffle
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364043.html
