1. 有一个文件,如何在不知道有多少行的情况下读取该文件,从中随机选择并输出一行
当我们读取第 i (i > 0) 行时,以 1 / i 的概率选择第 i 行,并替换掉原来选的行。
即总选择第一行,并以概率 1 / 2 选择第 2 行,以概率 1 / 3 选择第 3 行,依次类推。
到文件结束时,每个行被选中的概率都相等。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_LINE_LEN 4096
int main()
{
srand(time(NULL));
const char *filename = "input.txt";
FILE * file = fopen(filename, "r");
char line_buffer[MAX_LINE_LEN];
char selection[MAX_LINE_LEN];
int i = 1;
while(fgets(line_buffer, MAX_LINE_LEN, file))
{
if(rand()%i == 0)
strcpy(selection, line_buffer);
++i;
}
puts(selection);
fclose(file);
return 0;
}
简单推一下。
到 1 行时&#x