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

1. Scrieţi un program C++ care citeşte un număr natural k şi apoi scrie in fişierul Perechi.txt toate perechile de numere naturale mai mici egale cu k cu proprietatea ca ambele numere din pereche au acelaşi număr de divizori şi suma cifrelor fiecărui număr din pereche este număr par. Se va scrie în fişier câte o pereche pe linie.
Ex. pentru k=15 se va scrie în fişier 2 11
2 13
6 8
6 15
8 15
11 3


tudorpopa147: sigur este 11 3 acolo jos?
Utilizator anonim: ultima pereche nu ar trebui să fie 11 13?
ciucas24srg: 11 3 este
Utilizator anonim: "ambele numere din pereche au acelaşi număr de divizori şi suma cifrelor fiecărui număr din pereche este număr par"
Utilizator anonim: suma cifrelor lui 3 (care e 3 evident) nu este un număr par
tudorpopa147: ai dreptate, tocmai am scris programul, 11 13 imi afiseaza ultima pereche

Răspunsuri la întrebare

Răspuns de tudorpopa147
1

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

int main ()

{

   ofstream out("Perechi.txt");

   int k, d1, d2, nrdiv1, nrdiv2, suma1, suma2, x1, x2, copiex1, copiex2;

   cin >> k;

   for (x1=2; x1<=k; x1++)

   {

       nrdiv1 = 2;

       for (d1=2; d1<=x1/2; d1++)

           if (x1%d1==0)

               nrdiv1++;

       copiex1 = x1;

       suma1 = 0;

       while (copiex1>0)

       {

           suma1 += copiex1%10;

           copiex1 /= 10;

       }

       for (x2=x1+1; x2<=k; x2++)

       {

           nrdiv2 = 2;

           for (d2=2; d2<=x2/2; d2++)

               if (x2%d2==0)

                   nrdiv2++;

           copiex2 = x2;

           suma2 = 0;

           while (copiex2>0)

           {

               suma2 += copiex2%10;

               copiex2 /= 10;

           }

           if (nrdiv1==nrdiv2 && suma2%2==0 && suma1%2==0)

                   out << x1 << " " << x2 << endl;

       }

   }

   return 0;

}

Explicație:

Răspuns de Utilizator anonim
0

Am încercat să îl fac cât mai eficient posibil :)

#include <iostream>

#include <fstream>

#include <math.h>

using namespace std;

ofstream f_out("perechi.txt");

int număr_divizori (int param) {

   int ndiv = 2;

   for (int div = 2; div <= sqrt(param); div++) {

       if (!(param % div)) {

           ndiv++;

           if (param / div != div)

               ndiv++;

       }

   }

   return ndiv;

}

int sumă_cifre (int param) {

   int sumă = 0;

   while (param) {

       sumă += param % 10;

       param /= 10;

   }

   return sumă;

}

int main()

{

   int număr;

   cin >> număr;

   for (int număr_aux = 2; număr_aux <= număr; număr_aux++)

       if (!(sumă_cifre(număr_aux)%2))

           for (int număr2_aux = număr_aux + 1; număr2_aux <= număr; număr2_aux++)

               if (număr_divizori(număr2_aux) == număr_divizori(număr_aux) && !(sumă_cifre(număr2_aux) % 2))

                   f_out << număr_aux << ' ' << număr2_aux << '\n';

   f_out.close();

   return 0;

}


Levi20: De fapt doar in primul*
Utilizator anonim: corect, dar oricum ar fi nu afectează cu nimic complexitatea timpului de execuție pentru că e doar o iterare și aia fiind cea mai scurtă iterare posibilă :)
Levi20: :)) am zis sa-mi bag si eu coada. Important e ca te pricepi
Utilizator anonim: "greșeli" de genul face oricine și la sfârșitul zilei nici măcar nu contează - pentru că nu afectează cu absolut nimic. e doar un caracter în plus în fișierul sursă :))
Utilizator anonim: ^^ apreciez conversațiile, să știi - mai ales cu cineva care observă și citește cod
Levi20: Stiu ce spui=). Cateodata trimit surse si nici macar nu primesc reactie.. ce sa mai spun de intrebari referitoare la problema. Important e sa dai "copy-paste" si sa primesti nota mare:D
Utilizator anonim: :))) știuu cum e
Utilizator anonim: mai vorbim pe aici când mai dăm unul de altul
Levi20: Okay.. succes;)(ca sa primesti com mai poti face "greseli" mici pe acolo ca sa am pentru ce sa te critic:D
Utilizator anonim: Haha :D da, da
Alte întrebări interesante