se citesc de la tastatura n numere naturale. sa se afiseze numerele care au cea mai mare suma a divizorilor proprii. (SUBPROGRAM)
Răspunsuri la întrebare
Răspuns de
6
Ti-am facut o sursa in C++ de unde extragi subprogramul. Eu ti-am pus programul cu totul pentru a-l putea verifica. E o problema interesanta, destul de frumoasa. Sper sa-ti fie util programul. Succes!
#include <bits/stdc++.h>
using namespace std;
int j, x, a[1005];
void sum_div(int n, int v[])
{
int w[1000] = {0}, k, d, i, m, s, maxx = 0;
for(i = 1; i <= n; i ++)
{
m = v[i];
s = 0;
for(d = 1; d * d < m; d++)
{
if (m % d == 0) s = s + d + m / d;
}
if (m == d * d) s = s + d;
if (s > maxx) maxx = s, memset(w, 0, sizeof(w)), k = 1, w[1] = m;
else if(s == maxx) w[++ k] = m;
}
for(i = 1; i <= k; i ++) cout << w[i] << " ";
return;
}
int main()
{
cin >> x;
for(j = 1; j <= x; j ++)
cin >> a[j];
sum_div(x, a);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int j, x, a[1005];
void sum_div(int n, int v[])
{
int w[1000] = {0}, k, d, i, m, s, maxx = 0;
for(i = 1; i <= n; i ++)
{
m = v[i];
s = 0;
for(d = 1; d * d < m; d++)
{
if (m % d == 0) s = s + d + m / d;
}
if (m == d * d) s = s + d;
if (s > maxx) maxx = s, memset(w, 0, sizeof(w)), k = 1, w[1] = m;
else if(s == maxx) w[++ k] = m;
}
for(i = 1; i <= k; i ++) cout << w[i] << " ";
return;
}
int main()
{
cin >> x;
for(j = 1; j <= x; j ++)
cin >> a[j];
sum_div(x, a);
return 0;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Franceza,
9 ani în urmă
Matematică,
9 ani în urmă
Engleza,
9 ani în urmă
Limba română,
9 ani în urmă