online: 14; azi: 477; total: 50932 Manual clasa a ix a - Implementarea algoritmilor - Instructiuni de control

Probleme Rezolvate



Manual clasa a IX a

Implementarea algoritmilor

Instructiuni de control

Să se determine toate tripletele de numere naturale ( x ,y,z ) care îndeplinege condiția x 2 +y 2 +z 2 =n, unde n se citeşte de la tastatură .
# include < iostream >
# include < cmath >
using namespace std ;
int main () {
int n, x_max , y_max , z_max ;
cout << " Introduceti valoarea lui n: " ;
cin >> n;
cout << " Introduceti limita superioara pentru x: " ;
cin >> x_max ;
cout << " Introduceti limita superioara pentru y: " ;
cin >> y_max ;
cout << " Introduceti limita superioara pentru z: " ;
cin >> z_max ;
int x2, y2, z2;
for ( int x = 0 ; x <= x_max ; x++) {
x2 = x * x;
if (x2 > n) {
break ;
}
for ( int y = 0 ; y <= y_max ; y++) {
y2 = y * y;
if (x2 + y2 > n) {
break ;
}
for ( int z = 0 ; z <= z_max ; z++) {
z2 = z * z;
if (x2 + y2 + z2 > n) {
break ;
}
if (x2 + y2 + z2 == n) {
cout << "(" << x << ", " << y << ", " << z << ")" << endl ;
}
}
}
}
return 0 ;
}

Pentru a găsi toate triplelele de numere naturale (x, y, z) care îndeplinesc condiția x^2+y^2+z^2=n, putem utiliza o metodă de forță brută prin a verifica toate combinațiile posibile de numere x, y și z. Având în vedere că n poate fi destul de mare, este important să optimizăm acest proces prin a limita intervalul de căutare și/sau prin a utiliza anumite proprietăți matematice.
În acest caz, putem reduce intervalul de căutare pentru x, y și z, pornind de la observația că x, y și z trebuie să fie mai mici sau egale cu rădăcina pătrată a lui n (deoarece suma a trei pătrate nu poate fi mai mare decât n). De asemenea, putem utiliza proprietățile de paritate ale numerelor pătrate pentru a restrânge și mai mult intervalul de căutare.
În ceea ce privește algoritmul propriu-zis, putem utiliza trei structuri for pentru a itera prin toate valorile posibile ale lui x, y și z în intervalul corespunzător. În interiorul structurilor for, putem verifica dacă suma pătratelor este egală cu n, și dacă este cazul, afișăm tripletul (x, y, z).
În acest cod, utilizatorul introduce valoarea lui n și limitele superioare pentru x, y și z. Apoi, utilizăm trei structuri for pentru a itera prin toate valorile posibile ale lui x, y și z în intervalul specificat. Dacă suma pătratelor este egală cu n, afișăm tripletul (x, y, z).