Rezolvare model BAC 2018 Informatica (MI) – Subiectul al III-lea problema 3
Mai jos puteti gasi rezolvarea problemei 3 de la subiectul al III-lea din modelul pentru examenul de bacalaureat (mate-info) din anul 2018.
Rezolvare:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
void divizori(int n, int &x, int &y, int &z) { | |
for (x = 1; x < n / 2; x++) | |
if (n % x == 0) { | |
for (y = x + 1; n - x > 2*y; y++) | |
if ( n % y == 0 && n % (n - x - y) == 0) { | |
z = n - x - y; | |
return; | |
} | |
} | |
x = 0; | |
y = 0; | |
z = 0; | |
} | |
int main() { | |
int n; | |
cin >> n; | |
int x,y,z; | |
divizori(n,x,y,z); | |
cout << x << " " << y << " " << z; | |
return 0; | |
} |
Spor la lucru! Daca aveti intrebari nu ezitati sa le lasati in comentarii, va vom raspunde cat de repede putem
Puteti sa imi explicati de ce in acest for ( for (y = x + 1; n – x > 2*y; y++) ) n-x > 2*y?
Salut. Ca sa avem 3 numere x < y < z, astfel incat x + y + z = n, trebuie ca numarul y sa nu depaseasca o anumita valoare. Stiind ca z > y, avem x + y + z > x + y + y. Deci x + y + z > x +
2 * y. De aici scoatem ca n trebuie sa fie mai mare decat x + 2 * y. Deci n > x + 2*y, sau, rescrisa, n – x > 2*y. Orice y mai mare, nu ne-ar da o solutie valida. Sper ca acum are mai mult sens. Zi faina.
Da, am inteles. Multumesc!
Salut. Imi poti spune te rog de ce ai dat return fara nimic altceva in if? Ce face asta? Ii ca un break sau..? La clasa tin minte ca ne-o spus ca nu se da return intr-un subprogram de tip procedura.
era o varianta de rezolvare in care doar multiplii de 6 au aceasta proprietate?