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. Construiti un arbore cu proprietatea ca fiecare varf are numarul de descendenti directi cu 1 mai mare decat nivelul pe care se afla. Exceptie fac frunzele si nodul pentru care se termina cele n varfuri.
Astfel, radacina (aflata pe nivelul 0) are un singur descendent direct, varful de pe nivelul 1 are 2, cele de pe nivelul 2 au cate trei, etc.
Arborele va fi reprezetat prin vectorul legaturilor de tip tata.
Exemplu:
n=15
Vectorul tata:
0 1 2 2 3 3 3 4 4 4 5 5 5 5 6

#include<fstream>
using namespace std;
const int inf=15000;
int t[100],n;
ifstream f("date.in");
ofstream g("date.out");

int main()
 {
   int v,k,niv,p,i;
   f>>n;
   t[1]=0;
   p=1;
   niv=1;
   k=2;
   v=1;
   while(k<=n)
   {
        p=p*niv;
        for(i=1;i<=p && k<=n;i++)
        { t[k++]=v;
          if(i%niv==0) v++;
        }
        niv++;
   }
   for(i=1;i<=n;i++) g<<t[i]<<" ";
   f.close();
   g.close();
   return 0;
}

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