Se citeste un vector cu n elemente numere intregi si un
nr k natural Sa se rezolve urmatoarele cerinte:
a) Sa se afiseze cate elemente au suma cifrelor
egala cu k
b) Sa se afiseze cate elemente prime sunt mai mari
decat k in sirul citit
c) Daca k<n atunci sa se sorteze crescator primele k
elemente si descrescator urmatoarele n-k
elemente din vector
d) Sa se afiseze toate elementele din sir care au
exact k divizori
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
unsigned int n,k,i,j,aux,nrelem_scif,nrprime;
unsigned int prim(unsigned int x)
{
unsigned int d;
if(x<=1)
return 0;
if(x==2)
return 1;
if(x%2==0 && x!=2)
return 0;
for(d=3;d*d<=x;d+=2)
if(x%d==0)
return 0;
return 1;
}
unsigned int nrdivizori(unsigned int p)
{
unsigned int nrdiv=0,i;
for(i=2;i<=p/2;i++)
{
if(p%i==0)
nrdiv++;
}
return nrdiv+2;
}
int main()
{
cin>>n>>k;
int v[n];
for(i=0;i<n;i++)
{
cin>>v[i];
int m=v[i];
unsigned s=0;
while(m)
{
s+=m%10;
m/=10;
}
if(k==s)
nrelem_scif++;
}
cout<<"Numarul elementelor care au suma cifrelor egala cu "<<k<<" este: "<<nrelem_scif<<endl;
for(i=0;i<n;i++)
{
if(prim(v[i])==1 && v[i]>k)
nrprime++;
}
cout<<"In sirul citit, exista "<<nrprime<<" numere prime"<<endl;
if(k<n)
{
for(i=0;i<k-1;i++)
{
for(j=i+1;j<k;j++)
if(v[i]>v[j])
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
}
for(i=k;i<n-1;i++)
{
for(j=i+1;j<n;j++)
if(v[i]<v[j])
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
}
cout<<"Dupa sortarea ceruta, vectorul arata astfel: ";
for(i=0;i<n;i++)
cout<<v[i]<<' ';
cout<<endl;
}
cout<<"Elementele din sir care au exact "<<k<<" divizori sunt: ";
for(i=0;i<n;i++)
{
if(nrdivizori(v[i])==k)
cout<<v[i]<<' ';
}
return 0;
}
Explicație: