UTNianos

Versión completa: Problema de secuencia de numeros naturales en orden ascendente
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola Gente

Estoy intentando resolver este problema de Spoj: http://www.spoj.com/problems/TCX/

Sin embargo no me da que esta bien, no se si estoy planteandolo del modo incorrecto. Basicamente ingresas un numero y dicho numero va a determinar cuantos otros numeros podes ingresar.
Luego compara siempre el numero anterior con el siguiente y asi sucesivamente.


#include <iostream>
using namespace std;
/*Se ingresa un número natural N y a continuación una secuencia de N números naturales. Informar:

“T” si la secuencia está totalmente ordenada en forma ascendente;
“C” si está casi ordenada, esto es el último número no cumple orden;
“X” en otro caso: si está desordenada, si N o algún elemento de la secuencia no es natural, etc.
*/

int main(int argc, char *argv[]) {
int primernumero,ultimonumero,contadorT,cantnumeros,otrosnumeros;
//iniciamos el contador que verifica si se cumple secuencia C o secuencia X
contadorT=0;
//variable que toma la cantidad de numeros que el usuario ingresara
cin>>cantnumeros;
//variable para comparar el 1er valor
cin>>primernumero;
do {
//contador que al llegar a cero pedira el ultimo numero para comparar.
cantnumeros--;
//comparamos a partir del 2do numero y si es decreciente lo dejamos asentado
cin>>otrosnumeros;
if (otrosnumeros<primernumero){
contadorT++;}
} while (cantnumeros!=0);
//comparamos el ultimo numero
cin>>ultimonumero;
//si el ultimo numero es mayor al anterior y el contador nunca subio, muestra T
if (ultimonumero>otrosnumeros && contadorT==0){
cout<<"T";
//si el ultimo numero es menor al anterior pero el contador sigue en cero significa que muestra C
} else if (ultimonumero<otrosnumeros && contadorT==0){
cout<<"C";
//si el contador subio 1 vez aunque sea significa que los valores antes del ultimo numero alguno fue menor al anterior
} else if (contadorT!=1){
cout<<"X"; }
return 0;
}



Muchas gracias por su ayuda
68 visitas y nadie respondio? es una duda muy tonta?
Asi, a simple vista, estas comparando todos los numeros que ingresa con el primer numero (linea 23):



if (otrosnumeros<primernumero){




Me suena a que deberia de ser algo asi:


cin>>anteriorNumeroIngresado;
do {
//contador que al llegar a cero pedira el ultimo numero para comparar.
cantnumeros--;
//comparamos a partir del 2do numero y si es decreciente lo dejamos asentado
cin>>numeroIngresado;
if (numeroIngresado<anteriorNumeroIngresado){
contadorT++;
}
anteriorNumeroIngresado = numeroIngresado;
} while (cantnumeros!=0);




No lo probé, no sé si es el unico problema del codigo, ni se si es una solución.

Para que tu post tenga mas respuestas, ponele las cosas que probaste y que no funcionaron.
URLs de referencia