Informatică, întrebare adresată de mimisor02, 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.

Cerința
Scrieţi un program care să citească numărul natural N şi care să determine:

a. cifra minimă din numărul N; (20% din punctaj)

b. numărul obținut după prima transformare a numărului N; (30% din punctaj)

c. numărul sănătos obținut din N. (50% din punctaj)

Date de intrare
Fișierul de intrare cifra2.in conține pe prima linie numărul natural N.

Date de ieșire
Fișierul de ieșire cifra2.out va conține cele trei valori cerute, fiecare pe câte un rând.

Restricții și precizări
10 ≤ N ≤ 1000000;
Testele vor conține doar numere N care pot fi modificate conform cerinței.

Exemplu
cifra2.in

736191
cifra2.out

1
6258
2
Explicație
a. cifra minimă este 1

b. 736191 → 7369 → 6258

c. 6258 → 658 → 436, se continuă 436 → 46 → 13, se continuă 13 → 3 → 2.


in C++ va rog :)

Răspunsuri la întrebare

Răspuns de Palmabil
1

#include<bits/stdc++.h>

using namespace std;

ifstream fin("cifra2.in");

ofstream out("cifra2.out");

int cifmin(int x)

{

   int cif,cifm=INT_MAX;

   while(x)

   {

       cif=x%10;

       if(cif<cifm)

           cifm=cif;

       x/=10;

   }

   return cifm;

}

int elimuc(int x,int q)

{

   int nou=0,p=1;

   while(x!=0)

   {

       if(x%10!=q)

       {

           nou=nou+(x%10-q)*p;

           p=p*10;

       }

       x=x/10;

   }

   return nou;

}

int main()

{

   int x,q,k,l;

   fin>>x;

   int xx=x;

   q=cifmin(x);

   out<<cifmin(x)<<endl;

   out<<elimuc(x,q)<<endl;

   while(xx>9)

   {

       k=cifmin(xx);

       l=elimuc(xx,k);

       xx=l;

   }

   out<<l<<endl;

   return 0;

}

Alte întrebări interesante