Super Marco Richiesta di aiuto

Non capisco se ho sbagliato codice o se c’è solo un’errore di input e output, metto qua il mio codice:
#include <stdio.h>
#include <assert.h>
using namespace std;

int fact(int a) {
int r=1;
for(int i=a;i>0;i–) {
r*=i;
}
return 0;
}

double scosse(int N) {
int k,a,b,c;
double ans;
k=fact(N);
a=k/6;
if(N==1||N==2||N==3) {
switch(N) {
case 1:
ans=0;
break;
case 2:
ans=0.5;
break;
case 3:
ans=1.5;
break;
}
}
else {
c=a9+3(a-1)*a;
ans=c/k;
}
return ans;
}

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;

}

Però non tutti gli subtask erano sbagliati, ho preso 0 solo perchè “Execution killed (could be triggered by violating memory limits)” ma non è successo in tutti i casi, ho controllato e non ci sono errori di tempo o di memoria usato.

Non entro in merito alla logica del tuo codice però noto che la funzione fatt restituisce 0, forse dovrebbe restituire r, inoltre r è int e il fattoriale può essere un numero enorme!

Ho rifatto il codice ma nel subtask 2 riesco solo ad calcolare solo 2 dei testcase, ho rifatto il codice per i fattoriali e semplificato il codice in alcuni calcoli. Non capisco perché continuo ad avere risultati errati

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

long long fact(int N) {
	if(N!=1) {
		return N*fact(N-1);
	}
	else {
		return 1;
	}
} 

double scosse(int N) {
	if(N==1) return 0;
	if(N==2) return 0.5;
	double ans;
    long long k;
    k=fact(N);
    k/=6;
    ans=1.5+0.5*(k-1);
    return ans;
}


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;
}

Per N = 5 il codice restituisce 11.0 mentre il risultato corretto è 5.0;
La soluzione passa per quanti confronti sono necessari per ordinare un vettore di 5 elementi nel caso migliore e nel caso peggiore.

Già, ho capito che logicamente avevo capito sbagliato questo esercizio. Adesso l’ho rifatto con un’altro metodo e ho preso 100 su 100.
Grazie a quelli che hanno risposto a questo argomento