Sunteți pe pagina 1din 5

Problema 269

Se dau n numere naturale şi un număr natural k. Afişaţi în ordine crescătoare


acele numere date care sunt puteri ale lui k.

#include <iostream>

#include <fstream>

using namespace std; 

ifstream in("puterik.in"); 

ofstream out("puterik.out"); 

void Ordonare(int vector[], int &limita)

        int i;

        bool found = true;

        while (found)

        {

                 found = false;

                 for (i = 1; i <= limita - 1; i++)

                 {

                        if (vector[i] > vector[i + 1])

                        {

                                int aux = vector[i];

                                vector[i] = vector[i + 1];

                                vector[i + 1] = aux;

                                found = true;

                        }

                }
        }

bool Putere(int x, int k)

        if (x > 1)

        {

                while (x % k == 0)

                {

                          x /= k;

                }

        }

        return (x == 1);

int main()

        int n, k, m = 0;

        int v[105], put[105];

        int i;

        in >> n >> k;

        while(n)

        {

                in >> v[i];

                if (Putere(v[i], k))

                         put[++m] = v[i];

                 i++; n--;

         }
        Ordonare(put, m);

        for (i = 1; i <= m; i++)

                    out << put[i] << " ";

         return 0;

Problema 1608

Se dau n numere naturale nenule. Ordonați descrescător cele n numere după


numărul lor de divizori.
#include <fstream>

using namespace std;


ifstream fin("sortare_divizori.in");
ofstream fout("sortare_divizori.out");
int v[1000],div_v[1000],n;
int main()
{
int i,j;
fin>>n;
for(i=0;i<n;i++)
{
fin>>v[i];
int x=v[i];
int exp=0;
while(x%2==0)
{
exp++;
x/=2;
}
int nr_div=exp+1;
int d=3;
while(d*d<=x)
{
exp=0;
while(x%d==0)
{
exp++;
x/=d;
}
nr_div*=(exp+1);
d+=2;
}
if(x!=1)
nr_div*=2;
div_v[i]=nr_div;
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(div_v[i]<div_v[j])
{

swap(v[i], v[j]);
swap(div_v[i], div_v[j]);
}
else
if(div_v[i]==div_v[j])
if(v[i]>v[j])
swap(v[i], v[j]);

for(i=0;i<n;i++)
fout << v[i]<<' ';
return 0;
}

Problema 509

Se dă un vector cu n elemente numere naturale.

Cerinţa
Să se ordoneze crescător elementele vectorului.
#include<iostream>

 using namespace std;

   int n, i, j, aux, a[1002];

 int main()

 {

    cin>>n;

    for(i=1;i<=n;i++) cin>>a[i];

   for(i=1;i<n;i++)

         for(j=i+1;j<=n;j++)

    {

            if(a[i]>a[j])

             {

                 aux=a[i];

                a[i]=a[j];

                a[j]=aux;

             }

    }

    for(i=1;i<=n;i++) cout<<a[i]<<" ";


      return 0;

 }

Problema 618

Se dau înălțimile a n copii, numerotați de la 1 la n,


exprimate prin numere naturale. Afișați numerele de ordine
ale copiilor în ordinea crescătoare a înălțimii lor

#include <iostream>

using namespace std;


int n,a[1001],x[1001];

int main()
{
cin>>n;
for(int i=1;i<=n;i++)//memorez indicii initiali
x[i]=i;
for(int i=1;i<=n;i++)
cin>>a[i];
int gata;
for(int i=1;i<n;i++)
{
gata=1;
for(int j=i+1;j<=n;j++)
if(a[i]>a[j])
{
swap(a[i],a[j]);
swap(x[i],x[j]);
gata=0;
}
if(gata)
break;
}
for(int i=1;i<=n;i++)
cout<<x[i]<<' ';
return 0;
}

S-ar putea să vă placă și