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