Problema "Rispetta i versi"

Il codice di seguito mi risolve solo i primi 4 testcase, gli altri 6 mi dà che la soluzione è errata.

#include <stdio.h>

main()
{
FILE *f1;
FILE *f2;
f1=fopen(“input.txt”,“r”);
f2=fopen(“output.txt”,“w”);
int l,i;
int temp;
fscanf(f1,"%d\t",&l);
int v[l];
for(i=0; i<l; i++){
v[i]=i+1;
}
char s[l];
fgets(s,l,f1);
for(i=0; i<l-1; i++){
if(s[i]==’>’){
temp=v[i];
v[i]=v[i+1];
v[i+1]=temp;
}
}
for(i=0; i<l-1; i++){
if(s[i]==’>’){
if(v[i]<v[i+1]){
temp=v[i];
v[i]=v[i+1];
v[i+1]=temp;
}
}
else{
if(v[i]>v[i+1]){
temp=v[i];
v[i]=v[i+1];
v[i+1]=temp;
}
}

}
for(i=0; i<l; i++){
fprintf(f2,"%d ", v[i]);
}
fclose(f1);
fclose(f2);
}

So che il codice è primitivo, ma ho iniziato ad allenarmi da poco, quindi ogni consiglio è benaccetto.

Magari prova a spiegare cosa fa il tuo algoritmo, così è più semplice capire dove sbagli (se è sbagliato il ragionamento o l’implementazione) :yum:

Se non ho capito male parti dalla disposizione iniziale con i numeri crescenti da 1 a N, poi nel caso in cui tra due numeri in posizione i e i+1= sia presente il minore verifichi che i sia minore di i+1 altrimenti li inverti e viceversa.

Questa idea non è del tutto corretta , prova con questa configurazione
n=3 > > >

2 Mi Piace

Si, ho capito dov’è il problema, grazie :+1:

Ok, ho provato e ottimizzandolo un po’ è venuto :+1:; grazie ancora per il consiglio