Informatică, întrebare adresată de suciuradu, 8 ani în urmă

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 de boiustef
0

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)

Alte întrebări interesante