Ciao a tutti, ho tentato di risolvere il problema “allocazione di memoria” e su 28 testcase,20 sono corrette,però riesco ad ottenere solamente un punteggio di 10/100.In particolare ho dei problemi con le seconde subtask,nelle quali N è minore o uguale a 10,anche se provando tutti i numeri minori di 10,ottengo il risultato corretto al terminale.
Questo è il mio codice
#include <stdio.h>
#include <assert.h>
#include <math.h>
int alloca(int N) {
// Mettete qui il codice della soluzione
int esponente = 10;
int i,j;
int trovato = 0;
int risultato;
int risultati[100];
int indice = 0;
if (N >= 10000) {
for (i = 100; i >= 2; i--) {
for(j = esponente;j >= 2;j--) {
printf("%ld\n", (long int)pow(i,j));
if (((long int)pow(i,j)) <= N ) {
risultati[indice] = pow(i,j);
indice++;
printf("TROVATO");
break;
}
}
}
}
else if (N >= 1000 && N <= 9999) {
for (i = 50; i >= 0; i--) {
for(j = esponente;j >= 2;j--) {
printf("%ld\n", (long int)pow(i,j));
if (((long int)pow(i,j)) <= N ) {
risultati[indice] = pow(i,j);
indice++;
printf("TROVATO");
break;
}
}
}
}
else {
for (i = 25; i >= 2; i--) {
for(j = esponente;j >= 2;j--) {
printf("%ld\n", (long int)pow(i,j));
if ((( long int)pow(i,j)) <= N ) {
risultati[indice] = pow(i,j);
indice++;
printf("TROVATO");
break;
}
}
}
}
risultato = risultati[0];
for (i = 1; i<=indice-1; i++) {
if (risultati[i] > risultato) risultato = risultati[i];
}
return risultato;
}
int main() {
FILE *fr, *fw;
int N, i;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(1 == fscanf(fr, "%d", &N));
fprintf(fw, "%d\n", alloca(N));
fclose(fr);
fclose(fw);
return 0;
}
( http://ideone.com/dPHnE3 )
Grazie in anticipo per l’aiuto.