Se citește un număr natural, n (n≥2), și se cere să se scrie numerele x, y și z, divizori ai lui n, cu proprietatea că x mai mic decat y si y mai mic decat z si x+y+z=n
Numerele se scriu în ordine strict crescătoare, separate prin câte un spațiu, iar dacă n nu are astfel de divizori, se scrie mesajul nu exista.
Exemplu: pentru n=24 se scriu numerele
4 8 12
iar pentru n=9 se scrie mesajul
nu exista
C++
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <algorithm>
using namespace std;
int n,x,y,z, d[100],k,aux,i;
int main()
{
cout << "n="; cin >> n;
aux=n;
for (i=1; i*i<n; ++i)
if (n%i==0)
{
d[k++]=i; d[k++]=n/i;
}
if (i*i==n) d[k++]=i;
sort(d,d+k);
bool exista=0;
for (int i=0; i<k-2; ++i)
{
x=d[i];
for (int j=i+1; j<k-1; ++j)
{
y=d[j];
for (int t=j+1; t<k; ++t)
{
z=d[t];
if (x+y+z==n)
{
exista=1;
cout << x << " " << y << " " << z << "\n";
break;
}
else
{
if (x+y+z>n) break;
}
}
}
}
if (!exista) cout << "nu exista";
}
Explicație:
:))) am avut interes să realizez anume această variantă (algoritm):
am plasat toţi divizorii numărului n într-un vector d, pe care l-am sortat crescător. Am folosit metode efective de determinae a divizorilor şi de sortare a vectorului. Parcurgem vectorul de divizori şi căutăm tripletul (x,y,z)