Probleme de informatică
Clasa a IX-a
Elementele de bază C++ (46)
Subprograme predefinite (1)
Fişiere text (2)
Algoritmi elementari (109)
Tablouri unidimensionale (83)
Tablouri bidimensionale (64)
Probleme diverse (13)
Clasa a X-a
Subprograme (funcții) (87)
Şiruri de caractere (49)
Tipul înregistrare (26)
Recursivitate (57)
Alocarea dinamică a memoriei (2)
Liste înlănţuite (25)
Algoritmul lui Lee (1)
Clasa a XI-a
Metoda "Divide et impera" (12)
Metoda Backtracking (85)
Metoda Greedy (6)
Programare dinamică (18)
Grafuri neorientate (37)
Grafuri orientate (38)
Arbori (33)
Clasa a XII-a
Elemente de bază C# (32)
POO în C# (13)
Programare vizuală în C# (11)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
Se citeste un numar natural n si un sir cu n elemente numere naturale. Sa se descompuna sirul citit in cat mai putine subsiruri cu elemente ordonate strict crescator.
Fiecare element trebuie sa apartina unui singur subsir. Fiecare subsir va fi afisat pe cate o linie.
Exemplu:
9
7 1 3 4 0 7 2 7 10
subsirurile sunt:
7 10
1 3 4 7
0 2 7
Sugestie: se pot scrie si folosi functii pentru:
- stergerea unui element din sir(dupa ce e afisat in subsir)
- identificarea si afisarea unui subsir

#include <fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");

void citire(int a[100], int &n)
{//citirea lui n si a vectorului cu n elemente
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
}

void sterge(int a[100], int &n, int p)
{//sptergerea din vectorul a a elementului de la pozitia p
    for(int i=p;i<n;i++)
        a[i]=a[i+1];
    n--;
}

void subsir(int a[100], int &n)
{//idetificarea unui subsir strict crescator
    int x=-1;//pt ca elementele sunt naturale
    for(int i=1;i<=n;i++)
        if(a[i]>x)//e strict crescator
        {
            fout<<a[i]<<" ";//il afisez
            x=a[i];//il retin
            sterge(a,n,i);//il sterg
            i--;//pt ca i e contor in for
        }
}

void subsiruri(int a[100], int &n)
{
    while(n>0)//cat timp mai sunt elemente in a
    {
        subsir(a,n);//determina si afiseaza un subsir
        fout<<endl;//sare la linia urmatoare
    }
}

int main()
{
    int a[100], n;
    citire(a,n);
    subsiruri(a,n);
    fin.close();
    fout.close();
    return 0;
}

13 nov 2018
Site-ul conține 868 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian