martedì 1 aprile 2014

[C++] Zig Zag

Una sequenza viene detta una sequenza a zig-zag se i valori delle differenze tra numeri successivi si alterna tra valori positivi e valori negativi. La prima differenza può essere negativa 0 positiva, se è negativa quella dopo deve essere positiva, se è positiva quella dopo deve essere negativa e così via. Una sequenza con meno di due elementi è anche una sequenza a zigzag. Ti viene data una sequenza di numeri, tu puoi decidere di eliminare quanti numeri vuoi dalla sequenza in modo che i numeri rimanenti formino una sequenza a zigzag. Trovare la sequenza a zigzag più lunga che è possibile ottenere e stampare la sua lunghezza.

Input
Il programma deve leggere dal file : la prima riga contiene un intero N. La seconda riga contiene N valori positivi, i valori della sequenza di partenza.
Output
Il programma deve scrivere nel file la risposta al problema.

Assunzioni
1 ≤ N ≤ 800

Esempio
input output
10 7
1 17 5 10 13 15 10 5 16 8


Basta sfogliare la sringa ed eliminare tutti gli "errori" che si incontrano:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <cstdlib>
#include <iostream>
#include<fstream>

using namespace std;

ifstream in;
ofstream out;

int n;

     
int iz(int *c, int n){
     bool positive;
     int nc=n;
     positive= (c[0]-c[1] < 0);
     for (int i=0;i<n-1;i++){
     int d=c[i]-c[i+1];
      if (d==0||(d<0 && !positive)||(d>0 && positive))
         nc--;
      else
      positive= (d > 0);
         }
      return nc;
     }
 
 


int main()
{   in.open("input.txt");
    out.open("output.txt");
    
in>>n;
int c [n]; 
for (int i=0;i<n;i++)
    in>>c[i];
    
if (n<2)
   out<<1;

        
else 
out << iz(c,n);

    return 0;
}

Nessun commento:

Posta un commento

Si prega di non commentare in modo volgare e/o offensivo.