Ciao, non ho ancora risolto l esercizio al 100 ma ho fatto 70 modificando al volo il tuo codice.
Le considerazioni che ti suggerisco di fare è che per far avverare il fuorigioco l attacante deve avere una y minore del difensore più vicino al portiere quindi fare due cicli dove vai a controllare per ogni difensore è inutile.
Per la funzione calcola puoi anche mettere come parametri in ingresso direttamente i double/float cosi può avvenire il casting senza che lo devi specificare
#include <bits/stdc++.h>
using namespace std;
#define MAXN 5
float attk[MAXN];
float calc (float inizio, float fine, float D){
return ((fine - inizio ) * D /10 ) + fine;
}
int main(){
// lettura e scrittura da file
ifstream fin ("input.txt");
ofstream fout("output.txt");
int D,AT,DF;
//fin >> legge
fin >> D;
fin >> AT;
fin >> DF;
// attaccanti
for(int i = 0,xi,yi,xf,yf; i < AT; i++){
fin >> xi >> yi >> xf >> yf;
attk[i] = calc(yi,yf,D);
}
// difensori
float YF = 1000;
for(int i = 0,xi,yi,xf,yf; i < DF; i++){
fin >> xi >> yi >> xf >> yf;
// la funzione min restituisce il minimo valore tra gli argomenti della funzione
YF = min(YF,calc(yi,yf,D));
}
// verifica
bool flag = 1;
for(int i = 0; i < AT && flag; i++){
if(attk[i] < YF ){
flag = 0;
}
}
// fout << stampa
if(flag) fout << 'R';
else fout << 'F';
}
Devo ancora capire come mai i codici che scrivo escono tutti attacati sul forum mentre su altre parti no, faccio ancora 70 ma dovevo scriverlo per bene il codice <.< https://pastebin.com/8Q80hpUd
Ciao, probabilmente non è chiaro il testo: il fuorigioco avviene quando un attaccante si trova davanti a tutti i difensori mentre nel tuo codice controlli che l’attaccante si trovi davanti ad almeno uno dei difensori. @zJack1342 se vuoi continuare a postare inutilmente codice sbagliato, almeno formattalo correttamente. Puoi usare il pulsante “testo preformattato” presente nell’editor o altrimenti puoi scrivere tre accenti gravi (```) prima e dopo del codice.
Io non controllo uno qualsiasi. Controllo l ulitmo difensore della difesa (quello con la y minore ), cosi automaticamente superato quello ho superato tutti gli altri. Non credo che questo ragionamento non sia valido, potresti darmi conferma ?
Il problema che lo uso ma non worka. Incollo il codice lo evidenzio e premo sul pulsante <.<
Sul pastebin il codice è uguale identitco a come lo ho sul compilatore.
Lo ho postato ancora avesse qualche idea su come migliorarlo e fare 100, se la cosa da fastidio evito. Chiedo scusa nel caso avesse procurato fastdio postare il codice errato.
#include <bits/stdc++.h>
using namespace std;
#define MAXN 5
float attk[MAXN];
float calc (float inizio, float fine, float D){
return ((fine - inizio ) * D /10 ) + inizio;
}
int main(){
// lettura e scrittura da file
ifstream fin ("input.txt");
ofstream fout("output.txt");
int D,AT,DF;
//fin >> legge e assegna alla variabile il valore
fin >> D;
fin >> AT;
fin >> DF;
// attaccanti
for(int i = 0,xi,yi,xf,yf; i < AT; i++){
fin >> xi >> yi >> xf >> yf;
attk[i] = calc(yi,yf,D);
}
// difensori
float YF = 1000;
for(int i = 0,xi,yi,xf,yf; i < DF; i++){
fin >> xi >> yi >> xf >> yf;
// la funzione min restituisce il minimo valore tra gli argomenti della funzione
YF = min(YF,calc(yi,yf,D));
}
// verifica
bool flag = 1;
for(int i = 0; i < AT && flag; i++){
if(attk[i] < YF ){
flag = 0;
}
}
// fout << stampa
if(flag) fout << 'R';
else fout << 'F';
}
@marco.rocchi Ho visto che ancora non lo hai risolto, questa è la soluzione in c++.
Si trova il difensore con la y più piccola, se un attaccante ha una y minore di questo difensore è fuorigioco altrimenti no.