Cerinţa
Se dau n numere naturale şi un număr natural k. Afişaţi acele numere date care au cel puţin k divizori.
Date de intrare
Fişierul de intrare divk.in conţine pe prima linie numerele n şi k, iar pe a doua linie n numere naturale separate prin spaţii.
Date de ieşire
Fişierul de ieşire divk.out va conţine pe prima linie numerele care au cel puţin k divizori, separate printr-un spaţiu, în ordinea în care au fost citite.
Restricţii şi precizări
1 ≤ n ≤ 100
numerele de pe a doua linie a fişierului de intrare, precum şi k vor avea cel mult 9 cifre
Exemplu
divk.in
6 5
100 9 400 56 7 10
divk.out
100 400 56
rezolvarea mea este :
#include
using namespace std;
long long v[10],n,k,i,z=1,b[10],nd,j;
ifstream in("divk.in");
ofstream out("divk.out");
int main()
{
in>>n>>k;
for(i=1;i<=n;i++)
{
in>>v[i];
}
for(i=1;i<=n;i++)
{
nd=0;
for(j=1;j<=v[i]/2;j++)
{
if(v[i]%j==0)
nd++;
}
if(nd>=k)
{
b[z]=i;
z++;
}
}
if(z>1)
for(i=1;i<=z;i++)
{
if(v[b[i]]!=0)
out<
}
else
out<<'0';
}
Cum as putea optimiza acest cod si ce cazuri particulare ar putea exista???
Răspunsuri la întrebare
Răspuns de
0
Apreciez ca ai incercat si singur insa nu este tocmai ce iti trebuie.
Ca sa elimini elementele dintr-un vector poti folosi un subprogram:
void sterge(int x) // x reprezinta pozitia elementului pe care vrei sa il stergi
{
int i;
for(i=x;i<=n;i++)
v[i]=v[i+1]; // muta elementele cu o pozitie in spate
n--; // micsorezi marimea vectorului cu 1
}
de asemenea cand apelezi subprogramul adauga si un "i--;" fiindca daca ai aceeasi cifra pe pozitii consecutive o va sterge doar o data (adica daca vectorul tau este 2, 5, 5, 4 si vrei sa stergi elementele egale cu 5 vectorul va deveni 2, 5, 4)
Ca sa elimini elementele dintr-un vector poti folosi un subprogram:
void sterge(int x) // x reprezinta pozitia elementului pe care vrei sa il stergi
{
int i;
for(i=x;i<=n;i++)
v[i]=v[i+1]; // muta elementele cu o pozitie in spate
n--; // micsorezi marimea vectorului cu 1
}
de asemenea cand apelezi subprogramul adauga si un "i--;" fiindca daca ai aceeasi cifra pe pozitii consecutive o va sterge doar o data (adica daca vectorul tau este 2, 5, 5, 4 si vrei sa stergi elementele egale cu 5 vectorul va deveni 2, 5, 4)
Răspuns de
7
#include <bits/stdc++.h>
using namespace std;
int n, k, nrd, d, i, x;
int main()
{
ifstream f("divk.in");
ofstream g("divk.out");
f >> n >> k;
for(i = 1; i <= n; i ++)
{
nrd = 0;
f >> x;
for(d = 1 ;d * d < x; d ++)
if(x % d == 0) nrd = nrd + 2;
if(d * d == x) nrd ++;
if(nrd >= k) g << x << " ";
}
return 0;
}
using namespace std;
int n, k, nrd, d, i, x;
int main()
{
ifstream f("divk.in");
ofstream g("divk.out");
f >> n >> k;
for(i = 1; i <= n; i ++)
{
nrd = 0;
f >> x;
for(d = 1 ;d * d < x; d ++)
if(x % d == 0) nrd = nrd + 2;
if(d * d == x) nrd ++;
if(nrd >= k) g << x << " ";
}
return 0;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă