Iustinian57 Iustinian57 15-12-2022 Informatică a fost răspuns De ce nu merge acest program pe pbinfo la problmea #3734? #include #define MAXNRPIL 100 #define MAXNUME 100 char nume[MAXNRPIL][MAXNUME+1]; int timppil[MAXNRPIL]; int main( ) { FILE *fin, *fout; int cer, maxture, ture, nrpil, turk, min, sec, t, i, j, mint, maxtk, pil, pilk, cat, rest, u, max, p; char aux; fin = fopen( "formula1.in", "r" ); fscanf( fin, "%d%d%d%d%d", &cer, &maxture, &ture, &nrpil, &turk ); maxtk = -1; mint = 30 * 60 + 1; cat = maxture / ture; rest = maxture % ture; for ( i = 0; i < nrpil; i++ ) { fgetc( fin ); j = 0; nume[i][j] = fgetc( fin ); while ( nume[i][j] != '\n' ) { nume[i][++j] = fgetc( fin ); } for ( j = 0; j < ture; j++ ) { fscanf( fin, "%d.%d", &min, &sec ); // Transform in secunde t = min * 60 + sec; switch ( cer ) { case 1: if ( t < mint ) { mint = t; pil = i; } break; case 2: if ( j + 1 == turk && t > maxtk ) { maxtk = t; pilk = i; } break; case 3: timppil[i] += j < rest ? t * ( cat + 1 ) : t * cat; break; } } } fclose( fin ); fout = fopen( "formula1.out", "w" ); switch ( cer ) { case 1: i = 0; while ( nume[pil][i] != '\n' ) { fputc( nume[pil][i++], fout ); } break; case 2: i = 0; while ( nume[pilk][i] != '\n' ) { fputc( nume[pilk][i++], fout ); } break; case 3: // Ordonez timpii pilotilor cu select sort for ( u = nrpil - 1; u > 0; u-- ) { max = timppil[0]; p = 0; for ( i = 1; i <= u; i++ ) { if ( timppil[i] > max ) { max = timppil[i]; p = i; } else if ( timppil[i] == max ) { // Ordonez lexicografic j = 0; while ( nume[i][j] == nume[p][j] && j < MAXNUME + 1 ) { j++; } if ( nume[i][j] > nume[p][j] ) { max = timppil[i]; p = i; } } } timppil[p] = timppil[u]; timppil[u] = max; // Interschimb numele pilotilor for ( i = 0; i < MAXNUME + 1; i++ ) { aux = nume[p][i]; nume[p][i] = nume[u][i]; nume[u][i] = aux; } } for ( i = 0; i < nrpil; i++ ) {\ fprintf( fout, "%d. ", i + 1 ); j = 0; while ( nume[i][j] != '\n' ) { fputc( nume[i][j++], fout ); } fputc( '\n', fout ); } break; } fclose( fout ); return 0; }