/* File:  sequenz2.c */
/* Legge da tastiera una sequenza di 0 e 1, terminata da 2.
   Calcola la lunghezza della piu' lunga sottosequenza di 0, e la stampa.

   ESEMPIO: 0 0 1 0 1 0 0 0 1 0 1 2 ---> 3

   Versione ottimizzata che aggiorna la lunghezza massima solo alla fine di una
   nuova sottosequenza di 0 di lunghezza superiore alle precedenti. */

#include <stdio.h>

int main(void)
{

  int bit;   /* l'elemento della sequenza appena letto */
  int cont;   /* lunghezza attuale della sequenza di zeri */
  int maxlung;   /* valore temporaneo della massima lunghezza */
  int prec;  /* elemento della sequenza precedentemente letto */
  printf("Inserisci una sequenza di 0, 1 terminata da 2\n");
  cont = 0;     /* non abbiamo ancora letto niente */
  maxlung = 0;  /* all'inizio la lunghezza massima e' nulla */
  prec = 1; /* inizializza prec a un valore diverso da 0 */
  do {
    scanf("%d", &bit);
    if (bit == 0)  /* abbiamo letto un altro 0 */
      cont++;   /* dobbiamo aggiornare la lunghezza della sequenza corrente */
    else           /* abbiamo letto un 1 (o il 2 finale) */
      if (prec == 0) {   /* l'1/2 letto segue una sequenza di 0 */
	if (cont > maxlung)
          maxlung = cont;    /* aggiorna eventualmente il massimo temporaneo*/
	cont = 0; /* dobbiamo azzerare la lunghezza della sequenza corrente */
      }
    prec = bit;   /* il bit letto diventa quello precedente per
                     l'iterazione successiva */
  } while (bit != 2);   /* abbiamo letto il 2 e terminiamo il ciclo */
  printf("La piu' lunga sottosequenza di soli zeri e' lunga %d\n", maxlung);
  return 0;
}
