Se stie ca doua numere sunt prietene daca au acelasi numar de cifre si daca cifrele unuia pot fi rearanjate astfel incat sa se obtina celalalt numar.
Sa se scrie un program(C++)care verifica daca N numere citite sunt prietene intre ele.
Eu cred ca trebuie rezolvata cu vectori,dar nu am nicio idee de unde sa o apuc.
Va multumesc anticipat!
Eu unul aş modula programul, adică l-aş impărţi in mai multe funcţii.
O funcţie care verifică dacă două numere au acelaşi număr de cifre, o altă funcţie care verifică dacă două numere sunt perfecte.
Ce o sa fac in această ultimă funcţie:
Declari 2 vectori in care stochezi cifrele numerelor. Cum faci asta: intr-un for de la 1 la numarul de cifre, memorezi ultima cifra a numarului, dupa care trunchiezi numarul. Observi ca poti memora in ambii vectori cifrele ambelor numere, intr-un singur for (pentru ca numarul de cifre trebuie sa fie acelasi).
Dupa acest pas, eu as sorta vectorii. Nu e obligatoriu sa ii sotrezi, dar e mai comod. Poti implementa direct un bubble-sort direct in functie, sau il poti pune ca o functie separata.
Apoi, tot in aceasta functie, verifici daca vectorii sunt identici (daca numerele sunt perfecte, vectorii sortati care contin cifrele lor, trebuie sa fie identici pentru ca ambele numere trebuie sa aiba aceleasi cifre). Daca vectorii sunt identici, returnezi 1 (numerele sunt perfecte), altfel, daca ai gasit cel putin 2 componente aflate pe aceeasi pozitie, a caror valoare este diferita, iesi din structura repetitiva, cu un break; si returnezi zero (numerele nu sunt perfecte).
Any questions?
Daca doua numere au acelasi numar de cifre si ambele sunt perfecte,asta inseamna ca ele sunt prietene?
Pai ce proprietate au numerele perfecte? Si nu ii vad sensul acestei intrebari.
Cautand pe internet,am gasit mai multe definitii ale „numerelor prietene”:
-Ambele sa fie prime,iar diferenta lor sa fie 2(ex:5 si 7)
-Ambele sa fie egale cu suma divizorilor celuilalt
-Sa aiba acelasi numar de cifre,iar unul sa se obtina din altul prin rearanjarea cifrelor in numar.(In aceasta categorie se incadreaza problema mea)
Eu am impresia ca tu ai rezolvat problema in virtutea celei de-a doua definitii(aceea se refera la numerele perfecte).Nu stiu sigur care dintre definitii este corecta,dar eu as fi dorit rezolvarea pentru a treia.Uite aici cum am facut eu programul pentru a verifica daca doua numere sunt prietene(in cazul III):
#include<iostream.h>
main()
{
unsigned a,b,i,p;
int v[11],w[11];
cin>>a;
cin>>b;
for(i=0;i<=9;i++)
{v=0;w=0;}
while(a>0){v[a%10]=v[a%10]+1;a=a/10;}
while(b>0){w[b%10]=w[b%10]+1;b=b/10;}
i=0;p=1;
while((i<10)&&(p==1))
{if(v!=w)p=0;i=i+1;}
if(p==1)cout<<„Da „;
else cout<<„Nu „;
system(„pause”);
}
Acum problema este ca nu stiu sa-l extind la N numere(am facut programul doar pentru 2 numere-a si b).
Nu…eu am gresit la exprimare. In loc de „prietene” am zis „perfecte”.
Imi pare rau. Stiu ca te-am indus in eroare rau de tot.
Am rezolvat problema in virtutea celei de-a treia definitii, numai ca singura gresala e aceea ca am incurcat cele doua notiuni.