Duda C++

Hola, tengo un problema con un programa en C++, otra vez [+risas]. El programilla en question debe de hacer lo siguente:
Escribir un programa que lea una secuencia de números enteros
en el rango de 0 a 100 terminada en un numero mayor que 100 o menor que
0 y encuentre la subsecuencia de numeros ordenada, de menor a mayor, de
mayor longitud, dentro dicha secuencia. El programa dara como salida la
posicion donde comienza la subsecuencia y a continuacion su longitud. En
el siguiente ejemplo, la mayor secuencia creciente es 7 40 45 45 73 73
que empezo en la posición 3 y tiene una longitud de 6.
Entrada: 23 25 7 40 45 45 73 73 71 4 9 101
Salida: 3 6
El codigo que llevo hasta ahora es el siguiente:
#include <iostream>
using namespace std;

int main(){
int primero, segundo, contador, inicio;
cin >>primero>>segundo;
contador=0;
inicio=0;
while(primero>0 && primero<100){
    if (segundo>=primero){
      while(contador==0){
         contador++;
         inicio=contador;
    }
    contador++;
    }
    primero=segundo;
    cin>>segundo;
}
cout << inicio<<" "<<contador;

  cout << "\n\n";
   system("pause");
}

Lo que consigo hacer es que muestre 1 y 9 (con la secuencia de ejemplo), es decir, cuenta la primera vez que incrementa, en este caso 1, y las veces que incrementa en total. No puedo utilizar ni clases, ni funciones ni vectores. Se que esto lo debo de hacer yo para aprender, pero es que no consigo averiguar como hacerlo y es el ultimo ejercicio que me queda. No pido que me den un codigo y ya esta, sino una ayudita para ver si consigo sacarlo. Hace tiempo abri un hilo para una consulta de un programa y desde entonces me puse a practicar y estudiar, no me hizo falta ayuda en ningunos de los programas que he hecho y no tenia pensado abrir un hilo, pero no consigo averiguar hacer este y me decidi por abrirlo.
Un saludo.
De 0 hasta fin vas comprobando si se mantiene un incremento, si es así, lo almacenas en una una variable. Desde el punto que se rompa, lo mismo en una segunda variable hasta que se rompa, comprobando entonces si es mayor esa o la anterior, siendo así deberías sobre-escribir la primera y almacenar la posición de inicio, y continúas hasta terminar. Cuando termine el proceso solo deberás mostrar los datos asociados a la primera variable.

Un saludo.
El problema es que el fin no lo se porque es introducir numeros hasta que sean menores de 0 o mayores que 100 por lo que no es un numero determinado de numeros por lo que no se utilizar un for, no se si me entiendes.
Es que no tienes que usar un for, tienes que usar un while (o un do while) e ir comprobando cada entero leído y actuar en consecuencia.
Pues ni con while ni con do while me sale, no avanzo más del codigo que puse, y si avanzo es poco y me vuelvo a quedar atascado. Es por ahora el programa que más problemas me esta dando y eso que se supone que es de los "sencillos" [buuuaaaa] [buuuaaaa]
Bueno, ve por partes, a ver si así te puedes aclarar.

Primero haz un bucle que lea números hasta se introduzca alguno menor que 0 o mayor que 100 (leyendo uno antes de entrar al while).

Después lo modificas para que compare el número leído con el anterior leído. Para ello tienes que encargarte de almacenar el anterior número en otra variable y compararlos.

Después añades otra variable que almacene la posición del número leído (amos, que se incremente en cada iteración).

Con eso ya tienes la base para todo.

Ahora modificas el programa para que te encuentre las secuencias. Necesitarás un par de variables (para la posición y la longitud). En cada iteración, comparas los números, si el nuevo es mayor o igual al viejo, aumentas la variable que guarda la longitud de la secuencia; si el nuevo es menor, se inicia una nueva secuencia, de modo que tienes que copiar en la variable de posición la posición en la que estás (cogiéndola de la que aumenta en cada iteración) e inicializar a uno la longitud.

Bien, una vez puedes encontrar todas las secuencias, sólo tienes que añadir otras 2 variables para la posición y la longitud de la secuencia más larga, es decir, el resultado. Las inicializas a 0 y, cada vez que termina una secuencia, la comparas con la mayor secuencia encontrada (las 2 últimas variables añadidas) y, si es mayor, substituyes los valores de longitud y posición del resultado.

Después del bucle sólo tienes que imprimir esas 2 variables del resultado.
Gracias amuchamu, ahora me queda más claro, pero solo consigo determinar la posicion y no la longitud. Pongo la secuencia de ejemplo y me sale 3 2 y deberia de salir 3 6 ( la longitud seria el ultimo numero). Estoy dandole vueltas pero nada, haciendo cambios como poner el if que compara secuencias dentro del if cuando numero nuevo es menor al antiguo, que en mi caso sería un else, consigo que salga 3 y 6 pero solo para el ejemplo, cuando pongo otra secuencia diferente ya no vale y da 0 1 todos los que he probado.
Dejo el codigo actual. A simple vista esta todo bien, pero no sale:
int numero, numero2, cont, posicion1,longitud1,posicionmayor, longitudmayor;
numero2=100;
cont=1;
longitud1=1;
posicion1=0;
longitudmayor=0;
posicionmayor=0;
cin>>numero;
while(numero>0 && numero<100){

   if(numero>=numero2){
      longitud1++;
   }

   else{
      
    if(posicionmayor<posicion1 && longitudmayor<longitud1){
      posicionmayor=posicion1;
      longitudmayor=longitud1;
   }
posicion1=cont;
      longitud1=1;
   }
   

   
   cont++;
numero2=numero;
cin>>numero;

}
cout <<posicionmayor<<" "<<longitudmayor;
Había editado para explicarme de otra manera, pero mejor lo pongo en el mensaje de más abajo, disculpa. [tomaaa]
Porque posicionmayor guarda la posicion en la que empieza secuencia más larga hasta el momento.
Es posible que te falle en secuencias como por ejemplo "1,2,3,101".

Sólo actualizas posicionmayor y longitudmayor al encontrar un número menor que el anterior (al iniciar una nueva secuencia), con lo cual al leer el número 101 estas variables no están actualizadas y el bucle finaliza sin hacerlo.
Lo he puesto como lo tenia antes, que no lo postee:
int numero, numero2, cont, posicion1,longitud1,posicionmayor, longitudmayor;
numero2=100;
cont=1;
longitud1=1;
posicion1=0;
longitudmayor=0;
posicionmayor=0;
cin>>numero;
while(numero>0 && numero<100){

   if(numero>=numero2){
      longitud1++;
   }

   else{
      
    posicion1=cont;
      longitud1=1;
   }

   if(posicionmayor<=posicion1 && longitudmayor<longitud1){
      posicionmayor=posicion1;
      longitudmayor=longitud1;
   }

   
   cont++;
numero2=numero;
cin>>numero;

}
cout <<posicionmayor<<" "<<longitudmayor;

Le he añadido un = en if(posicionmayor<=posicion1 && longitudmayor<longitud1) y ahora sale con todas las secuencias que introduzca.
Muchas gracias a todos por vuestra ayuda.
Un saludo.
10 respuestas