Informatică, întrebare adresată de Utilizator anonim, 9 ani în urmă

Salut! O intrebare destul de grea da sper sa stie cineva. Se da un numar n natural , sa se determine cel mai apropiat numar palindrom format cu numar minim de pasi (nr de cifre) ,daca nu ati inteles poate intelegeti din exemplu : n=1741 , raspuns 1771 deoarece se aduna 3 la 4 si devine 1771 si acesta este numarul minim de pasi ,alt exemplu : n=1332 ,raspuns 2332 deoarece numarul minim de pasi este 1 si se aduna 1 la 2 ,deasemenea sa se afle pentru numarul n cati pasi s au folosit : ex: n=1741 : rezultat=1771 nr_pasi=3

Răspunsuri la întrebare

Răspuns de CRG
2
#include <iostream>
using namespace std;

int main()
{
    unsigned numar;
    cout << "n="; cin >> numar;

    unsigned char cifre[30];
    unsigned numarCifre = 0, numarPasi = 0;
    while (numar > 0) {
        cifre[numarCifre++] = numar % 10;
        numar /= 10;
    }

    // cifrele din tablou sunt in ordine inversa, dar nu ne afecteaza
    for (int i = 0, j = numarCifre - 1; i < j; i++, j--)
        if (cifre[i] != cifre[j]) {
            unsigned diferenta = 0;
            if (cifre[i] > cifre[j]) {
                diferenta = cifre[i] - cifre[j];
                cifre[j] += diferenta;
            }
            else {
                diferenta = cifre[j] - cifre[i];
                cifre[i] += diferenta;
            }
            numarPasi += diferenta;
        }

    numar = 0;
    // cifre -> numar
    for (int i = 0; i < numarCifre; i++)
        numar = numar * 10 + cifre[i];

    cout << "rezultat: " << numar << endl;
    cout << "Numar pasi: " << numarPasi << endl;

    return 0;
}



Alte întrebări interesante