Super Marco 90/100

Buongiorno,
sono nuovo al linguaggio C++ e a questo tipo di problemi, quindi sono ancora alle basi.
Ho provato a risolvere “Super Mario” e il mio punteggio non va oltre a 90/100 e non capisco perché.

Questo è il mio codice, grazie in anticipo per il chiarimento:

#include <stdio.h>
#include <assert.h>

double scosse(int N) {
  double volte = 0;
    for  (double i = N;i > 0;i--) {
        volte = volte + (i-1)/2.0;
    }
return volte;
}


int main() {
    FILE *fr, *fw;
    int N;

    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(1 == fscanf(fr, "%d", &N));
    fprintf(fw, "%.6f\n", scosse(N));
    fclose(fr);
    fclose(fw);
    return 0;
}

Il tuo codice va fuori tempo. Serve una soluzione più efficiente. Prova a pensare se c’è un modo per calcolare il risultato senza cicli… La media è (caso migliore + caso peggiore) / 2. Il caso milgiore è banale: Non prende nessuna scossa. Il caso peggiore è che prenda tutte le scosse possibili che sono al primo turno N-1, al secondo N-2 etc. C’è un modo per calcolare questo senza un ciclo for? Sommatoria di Gauss. Se hai domande chiedi pure.

Per prima cosa grazie perché effettivamente il codice poteva essere molto più semplice e il tuo consiglio mi ha aiutato molto. Ho provato a cambiarlo e mi sembrava di aver trovato una soluzione corretta, invece continua a darmi 90/100 e non capisco perché .

#include <stdio.h>
#include <assert.h>

double scosse(int N) {
 return (N*(N-1))/4.0;
    }




int main() {
    FILE *fr, *fw;
    int N;

    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(1 == fscanf(fr, "%d", &N));
    fprintf(fw, "%.6f\n", scosse(N));
    fclose(fr);
    fclose(fw);
    return 0;
}
Grazie in anticipo per l'aiuto

Volendo puoi non dichiarare la funzione, ma puoi semplicemente dichiarare N come float e scrivere la risposta come N=N(N-1)/4

Il template è sbagliato. N dovrebbe essere un long long int