Хранишь текущее наименьшее и каждый раз проверяешь
Если меньше чем текущее, то перезаписываешь минимальное и строку
#include <stdio.h>
#include <string.h>
int main()
{
int N;
char a1[20];
float k;
char str[20];
float a2 ;
float min = 9999.0000;
scanf ("%d\n", &N);
scanf ("%s %f", str, &k);
for (int i=0; i<N-1; i++) {
scanf ("%s %f\n", a1, &a2);
if(a2<=min) {
a2 = min;
strncpy(&a1[0], str, sizeof(a1));
}
}
printf ("%s", str);
return 0;
}