👤
a fost răspuns

Se da un numar natural <2000000000 in variabila n. Se cere sa se construiasca un vector cu cifrele lui n si apoi sa se afiseze cel mai mare si cel mai min numar palindrom, care se poate forma cu aceste cifre.Daca nu exista astfel de numere se va afisa mesajul "Nu exista".
Exemplu:pentru numarul 2020 se va afisa 2002 si 2002.
In c sau c++ va rog


Răspuns :

#include <iostream>
#include <algorithm>
using namespace std;
int invers(int n){
    int nr=0;
    while(n){
        nr=nr*10+n%10;
        n/=10;
    }
    return nr;
}
int val(int x[], int n){
    int i,nr=0;
    for(i=0;i<n;i++){
        nr=nr*10+x[i];
    }
    return nr;
}
int verif(int x[], int n){
    int i;
    if(x[0]==0)return 0;
    for(i=0;i<n/2;i++)
        if(x[i]!=x[n-i-1])return 0;
    return 1;
}

int main(){
    int n,i,pmax=-1,pmin=2000000001,v[10],k=0,vl;
    cin>>n;
    while(n){
        v[k]=n%10;
        k++;
        n/=10;
    }
    sort(v,v+k);
    do{
        if(verif(v,k)){
            vl=val(v,k);
            if(vl>pmax)pmax=vl;
            if(vl<pmin)pmin=vl;
        }
    }while(next_permutation(v,v+k));
    if(pmax==-1)cout<<"Nu exista";
    else cout<<pmax<<" "<<pmin;
}