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

Cristian, elev în clasa a V-a, a primit o cutie cu N bomboane. Chiar dacă i-ar plăcea, știe că nu este indicat să le mănânce pe toate imediat. L-a întrebat pe tatăl său câte bomboane are voie să mănânce și acesta i-a răspuns că poate mânca doar un număr sănătos de bomboane. Cristian a fost nedumerit. Tatăl i-a explicat că un număr sănătos este un număr natural care poate fi modificat, până se obține o singură cifră, prin eliminarea celei mai mici cifre din el și înlocuirea fiecărei cifre rămase în număr cu diferența dintre valoarea ei și cifra minimă. De exemplu, cifra minimă a numărului 3151 este 1 iar prin eliminarea ei din număr se obține 35, după care prin înlocuirea cifrelor rămase se obține 24 adică cifra 3 se înlocuiește cu cifra 2, cifra 5 cu 4, rezultând numărul 24; se continuă procedeul: cifra minimă a numărului 24 este 2 iar prin eliminarea ei din număr se obține 4, după care prin înlocuirea cifrei rămase se obține 2 moment în care a rămas o singură cifră. Așadar numărul sănătos obținut din 3151 este 2. Ajutați-l pe Cristian să afle câte bomboane are voie să mănânce.


rossetta: Cerinta nu este completa deoarece lipsesc restrictiile ( n maxim). Am gasit problema pe : https://www.pbinfo.ro/?pagina=probleme&id=1984 . Aceasta este problema pe care trebuie sa o rezolvi ?
Fran1234: Da.

Răspunsuri la întrebare

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

int main() {
    int n, nr = 0;
    cin >> n;
    if(n <= 9)
      cout << n << endl << n << endl;
    while ( n > 9) {
    int p = 1;
    int min = 9, nn = n;
    while(nn > 0) {
      if(nn % 10 < min)
        min = n % 10;
      nn /= 10;
    }
    nn = n;
    int m = 0;
    while(nn > 0) {
      if(nn % 10 != min) {
        m = m + nn % 10 * p;
        p = p * 10;
      }
      nn /= 10;
    }
    p = 1;
    while(m > 0){
     nn = nn + (abs)(m % 10 - min) * p;
     p *= 10;
     m /= 10;
    }
    nr++;
    if(nr == 1)
      cout << min << endl << nn << endl;
    n = nn;
    }
    cout << n;
    return 0;
}
De fisiere trebuie sa te ocupi tu.

Fran1234: merci
rossetta: cu placere
Fran1234: as putea evita functia abs ca nu am invatat-o la scoala inca
rossetta: da, poti sa o eviti
rossetta: in aceasta problema abs returneaza valoarea absoluta a diferentei
Alte întrebări interesante