Forum Clubic

Turbo pascal - deux entiers frères

Deux entiers N1 et N2 sont dits frères si chaque chiffre de N1 apparaît au moins une fois dans N2 et inversement.
Ecrire un programme qui saisit deux entiers N1et N2, vérifie et affiche s’ils sont frères ou non.
Exemple :
-Si N1=1164 et N2=614 le programme affichera N1 et N2 sont frères
-Si N1=405 et N2=554 alors le programme affichera N1 et N2 ne sont pas frères.

Svp est ce que quelqu’un aurait une idée commant résoudre ce problème?

Y a pleins d’algorithmes différents.
Par exemple, tu peux extraire la liste des chiffres uniques utilisés dans chaque nombre dans un tableau. Tu compares les tailles des tableaux, en cas d’inégalité, c’est que les nombres ne sont pas frères. Si les tableaux ont la même taille, tu n’as qu’à les parcourir pour vérifier que tous les chiffres présents dans l’un le sont dans l’autre.

1- tu ‘éclates’ chacun des nombres entableau de chiffres.
2- tu tries chaque tableau avec suppression de doublons
3- tu compares les résultats

Super simple cet exercice:

  1. Tu te fais 2 tableaux de 10 booléens (un tableau pour chaque nombre)
  2. Tu initialise ces tables à false
  3. Tu prends ton premier nombre, et pour chaque chiffre le composant, tu passes l’indice de ton tableau à true
  4. Tu fais de même pour le second nombre
  5. Tu fais une boucle qui va vérifier que tab1[0] = tab2[0] et ainsi de suite jusque 9
  6. Si les deux tables correspondent, les nombres sont frères, sinon, non.

Y a comme trois fois la même solution là… ^^

ok merci bcp

voila la solution :
procedure frere(n1,n2:entier);
convch(n1,ch1)
convch(n2,ch2)
i:=0
flag:=0
repeter
j:=0
i:=i+1
repeter
j:==j+1
si ch1[i]=ch2[j] alors
flag:=vrai
finsi
jusqu’a(flag) ou (j=long(ch2)
jusqu’a(flag)ou (i= long(ch1)
si (flag) alors ecrire(“les deux nombres sont freres”)
sinon ecrire(“les deux nombres ne sont pas frere”)
esssssssssssssssst voila la soultion et plus c est plus optimiser que les autre