Informatică, întrebare adresată de anatudor27, 9 ani în urmă

Să se determine dacă se poate construi un număr palindrom din cifrele unui număr întreg x cu cel mult 9 cifre citit de la tastatură. În caz afirmativ se va construi cel mai mare număr palindrorn.

Răspunsuri la întrebare

Răspuns de blindseeker90
7
#include <iostream>
using namespace std;

//introducem vector 
//cu numarul de aparitii al fiecarei cifre
//initial numarul de aparitii pentru toate este 0
int aparitii_cifre[10];
int main(){

long int n,rezultat=0;
int i,cifra,nr_cifre=0,cifra_aparitii_impar=-1,nr_aparitii_impar=0,aparitie_cifra;
cout<<"Introduceti numarul:";
cin>>n;
//calculam nr de cifre din n si numarul de aparitii al fiecaruia
while(n>0){
cifra=n%10;
aparitii_cifre[cifra]++;
nr_cifre++;
n=n/10;
}
//determinam numarul de cifre care apar de un numar impar de ori
for(i=0;i<10;i++){
cout<<aparitii_cifre[i]<<" ";
if(aparitii_cifre[i]%2==1){
nr_aparitii_impar++;
}
}
cout<<endl;
//daca numarul de cifre este par, atunci trebuie sa avem nr_aparitii impar cifre=0 ca sa fie palindrom
//daca numarul de cifre este impar, atunci nr_aparitii_impar cifre=1 este obligatoriu
if((nr_cifre%2==0&&nr_aparitii_impar>0)||(nr_cifre%2==1&&nr_aparitii_impar!=1)){
cout<<"Nu se poate forma palindrom";
return 0;
}
//daca am stabilit ca este nr par de cifre atunci citim toate cifrele care au aparitii
//pornind de la cea mai mare si ajungand la cea mai mica
//daca am stabilit ca este impar, le citim pe toate care au nr par de aparitii si la sfarsit o adaugam pe cea
//cu nr impar de aparitii
//apoi ne intoarcem si le citim de la cea mai mica la cea mai mare ca sa formam palindromul

for(i=9;i>=0;i--){
if(aparitii_cifre[i]>0){
aparitie_cifra=aparitii_cifre[i];
while(aparitie_cifra>1){
rezultat=rezultat*10+i;
aparitie_cifra=aparitie_cifra/2;
}
//gasim cifra impara daca este nevoie
if(aparitii_cifre[i]%2==1){
cifra_aparitii_impar=i;
}
}
}

if(nr_aparitii_impar==1){
rezultat=rezultat*10+cifra_aparitii_impar;
}

for(i=0;i<=9;i++){
if(aparitii_cifre[i]>0){
aparitie_cifra=aparitii_cifre[i];
while(aparitie_cifra>1){
rezultat=rezultat*10+i;
aparitie_cifra=aparitie_cifra/2;
}
}
}

cout<<rezultat;

return 0;
}
Alte întrebări interesante