50064. Merge Sort

難度:3/5

要記得要怎麼用fread。

1
fread(dest_ptr(array), sizeof(a_block), cnt, fp);

會回傳讀到的bytes,所以如果要檢測EOF:

1
2
3
if(fread(ptr, sizeof(), cnt, fp) != cnt){
// EOF
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int n;
int arr[16];
FILE* fp[16];
int have_num[16];
int cnt = 0;

int main(){
scanf("%d", &n);
for(int i = 0; i < n; i++){
char s[20]; scanf("%s", s);
fp[i] = fopen(s, "rb");
}
for(int i = 0; i < n; i++){
if(fread(&arr[i], sizeof(int), 1, fp[i]) == 1){
have_num[i] = 1, cnt++;
}
else{
have_num[i] = 0;
}
}

while(cnt != 0){
int min_idx = -1, min_num = INT_MAX;
for(int i = 0; i < n; i++){
if(have_num[i] && arr[i] < min_num){
min_idx = i;
min_num = arr[i];
}
}

printf("%d\n", arr[min_idx]);
if(fread(&arr[min_idx], sizeof(int), 1, fp[min_idx]) != 1){
have_num[min_idx] = 0, cnt--;
}
}
}


50064. Merge Sort
https://aaronlin1229.github.io/judgegirl_50064/
Author
Akizumi
Posted on
July 17, 2023
Licensed under