Clasa a IX-a lecția 12

From Algopedia
Jump to navigationJump to search

Aplicatii cu secvente

#516SumSec1

Se dă un vector format din n elemente, numere naturale. Calculați suma elementelor din secvența determinată de primul și ultimul element impar.

#include <stdio.h>

int main(){
  int n, i, s, s1, x, start;

  scanf ( "%d", &n );
  s = s1 = 0;
  start = 0;
  for ( i = 0; i < n; i ++ ){
    scanf ( "%d", &x );
    if ( x % 2 ){
      start = 1;        // dam startul la adunarea numerelor
      s += x + s1;      // adunam nr impar si suma acumulata pana atunci
      s1 = 0;           // resetam suma acumulata pana atunci
    }
    else
      if ( start )      // daca am gasit anterior un nr impar, pun x intr-o suma 
        s1 += x;
  }
  printf ( "%d", s );
  return 0;
}

SecvZero - cea mai lunga subsecventa de elemente egale cu zero

Se dă un vector cu n elemente numere naturale. Determinați cea mai lungă secvență de elemente nule din vector. Dacă în vector există mai multe secvențe de elemente nule de lungime maximă se va determina cea mai din stânga ( adica prima gasita).

// Cea mai lunga secventa de zerouri din sir
#include <stdio.h>

int main(){
  int n, i, nr, st, stmax, l, lmax;
  scanf( "%d", &n );

  lmax = 0;           // lungimea celei mai lungi secvente de zerouri
  l = 0;              // lungimea secventei de zerouri curente
  for(i = 1; i <= n; i++ ){
    scanf( "%d", &nr );   // citim numarul de pe pozitia i din sir
    if( nr == 0 ){        // daca numarul este 0
      if ( l == 0 )       // daca e inceput de secventa
        st = i;           // pastram pozitia de inceput a secventei curente
      l++;                // lungimea secventei curente creste cu 1
      if( lmax < l ){     // verific daca am obtinut o secventa mai lunga decat cea maxima
        lmax = l;         // daca da, actualizez valoarea secventei maxime
        stmax = st;       // si memorez pozitia sa de inceput
      }
    }
    else                  // daca nr nu este 0
      l = 0;              // resetam lungimea secventei curente la 0
  }

  printf("%d %d", stmax, stmax + lmax - 1 );
  return 0;
}

SecvEgaleCea mai lunga subsecventa de elemente egale

Se dă un vector cu n elemente, numere naturale. Determinați cea mai lungă secvență de elemente egale din vector. Dacă în vector există mai multe secvențe de elemente egale de lungime maximă se va determina cea mai din dreapta.

// Cea mai lunga secventa de elemente egale din sir, cea mai din dreapta
#include <stdio.h>

int main(){
  int n, i, a, b, st, stmax, l, lmax;

  scanf( "%d%d", &n, &a );

  l = lmax = 1;            // lungimea secventei curente de elem egale, aceasta e si lungimea maxima de pana acum
  st = stmax = 1;          // pozitia secventei curent, aceasta este si poz secv. maxime de pana acum
  for(i = 2; i <= n; i++ ){
    scanf( "%d", &b );    // citim numarul de pe pozitia i din sir
    if( b == a ){         // daca numarul este 0
      l++;                // lungimea secventei curente creste cu 1
      if( lmax <= l ){    // verific daca am obtinut o secventa mai lunga decat cea maxima
        lmax = l;         // daca da, actualizez valoarea secventei maxime
        stmax = st;       // si memorez pozitia sa de inceput
      }
    }
    else{                  // daca nr nu este egal cu precedentul
      l = 1;               // elementul citit e singurul in secventa
      st = i;              // si pozitia lui e pozitia secventei curente
    }
    a = b;                 // salvam valoarea citita in a, pentru a o compara cu cea citita la pasul urmator
  }

  printf("%d %d", stmax, stmax + lmax - 1 );   
  return 0;
}

Laborator

secventa11

Într-un şir trebuie determinată lungimea maximă a unei secvenţe de numere care în scrierea binară au numai cifra 1.

SecvEgale2

Se dă un vector cu n elemente, numere naturale. Determinați câte secvențe ale vectorului au toate elementele egale.

Secvente1

Se dă un șir cu n elemente, numere naturale și un număr k. Determinați numărul minim de secvențe disjuncte în care trebuie împărțit șirul astfel încât fiecare element al șirului să aparțină unei secvențe și fiecare secvență să conțină cel mult k elemente impare.

SumSec

Se dă un şir format din n elemente, numere naturale. Calculaţi suma elementelor din secvenţa determinată de primul şi ultimul element prim.

SecvMax

Să se determine cea mai lungă secvență de elemente pare dintr-un vector.

SecvCresc

Să se determine cea mai lungă secvență de elemente ordonate strict crescător dintr-un vector.

Secvente

Se dă un şir format din n elemente, numere naturale. Determinaţi câte secvenţe maximale cu elementele ordonate crescător conţine şirul.

Tema

Terminati de rezolvat problemele de la laborator A - Tokitsukaze and Discard Items -Div1