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

Să se scrie un program care generează numere palindrome pe baza următoarelor date:

un număr n reprezentând lungimea exactă a numerelor palindrome (n<=10)
două cifre m si p ai cărui multipli se regăsesc printre cifrele numerelor generate

Soluția va conține numărul de numere generate prin această metodă.



Exemplu: n=3, m=2, p=6 va genera setul de numere

202 222 242 262 282 404 424 444 464 484 606 626 646 666 686 808 828 848 868 888

însumand 20 de astfel de numere.

Răspunsuri la întrebare

Răspuns de andrei750238
2

#include <iostream>

using namespace std;

bool multiplu(int nr, int a, int b){

//Returneaza 1 daca cifrele lui n sunt multiple ale lui a sau b, 0 in caz contrar

while(nr){

 if(nr%10%a!=0 && nr%10%b!=0) return 0;

 nr/=10;

}

return 1;

}

int rasturnat(int nr){

   //Returneaza rasturnatul numarului

   int r=0;

   while(nr){

       r=r*10+nr%10;

       nr=nr/10;

   }

   return r;

}

int main(){

int n,m,p,zece=1;

//Citeste date

cin >> n >> m >> p;

//Determina capetele intervalului de cautare

for(int i=1;i<n;i++)zece*=10;

//Pentru ficare numar din interval

for(int i=zece;i<zece*10;i++){

 //Verifica daca cifrele sunt multiple ale lui m sau p si daca sunt palindroame

 if(multiplu(i,m,p) && i==rasturnat(i)) cout << i << " ";

}

}

Anexe:

andrei750238: Nota : Exista variante mai eficiente, problema se poate rezolva si cu backtracking.

Totusi am ales sa scriu aceasta varianta pentru ca e cea mai usor de inteles.
Alte întrebări interesante