Informatică, întrebare adresată de IonutzPadurariu, 9 ani în urmă

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 viman39
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)
Răspuns de express
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;
}

Alte întrebări interesante