賀老師教兩班 C++:
1 班學號 1~41、2 班學號 42~84。
每班需隨機抽 5 位不重複學生參加評價,寫程式完成抽籤。
原始碼直接 rand() % 84 產生 10 個號碼,存在三大缺失:
srand(),每次執行結果相同#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void drawClass(int start, int end, const char* className) {
int total = end - start + 1;
int *pool = malloc(total * sizeof(int));
for (int i = 0; i < total; i++) pool[i] = start + i;
// Fisher-Yates 洗牌演算法
for (int i = total - 1; i > 0; i--) {
int j = rand() % (i + 1);
int tmp = pool[i]; pool[i] = pool[j]; pool[j] = tmp;
}
printf("%s 抽中學號:", className);
for (int i = 0; i < 5; i++) printf("%d ", pool[i]);
printf("\n");
free(pool);
}
int main() {
srand((unsigned)time(NULL)); // 以當前時間為種子
drawClass(1, 41, "1 班");
drawClass(42, 84, "2 班");
return 0;
}

1 班 抽中學號:7 23 5 39 12 2 班 抽中學號:56 78 45 62 83
drawClass 可復用於任意區間抽樣