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

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


artur99: aaaa, e din culegere... Asta întrebam
VoxBig: :))
artur99: Nu pare de 5-8 :))) adică trebuie puse în vector, apoi sortate, apoi de la condiții scos 0 de la încept, etc, etc
VoxBig: stiu
VoxBig: :.(
artur99: Ați făcut backtracking? :))
artur99: Începusem ceva, aveam aproape 40 de linii, și devenise prea complicat =)) Tre să fie vreo metodaă de care nu îmi dau eu seama
VoxBig: poti folosi backtracking desi nu am facur
VoxBig: si daca nu poti aia e
VoxBig: mersi macar ca ai incercat

Răspunsuri la întrebare

Răspuns de artur99
1
#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;
}

VoxBig: OMG!!!!!!!!!!Iti multumesc din tot sufletul
VoxBig: :))
artur99: cu plăcere :))
Alte întrebări interesante