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

Salut! Am urmatoarea problema care trebuie rezolvata in c++ cu while loop.

Cerinta
Se citeste de la tastatura un numar natural N. Calculati numarul minim care se obtine prin eliminarea unei singure cifre din numarul initial.



Date de intrare
Se citeste de la tastatura numarul natural N.



Date de iesire
Se va afisa numarul minim dupa eliminarea unei cifre.



Restrictii si precizari
0 < N < 1,000,000,000


Exemplu
Date de intrare Date de iesire
5912 512

Răspunsuri la întrebare

Răspuns de andrei750238
2

#include <iostream>

using namespace std;

int main(){

   int n, copie, maxim=0,ap=1;

   //Citim n si ii facem o copie

   cin >> n;

   copie = n;

   //Determinam cifra maxima din numar si numarul de aparitii

   while(n>0){

       //Daca ultima cifra e mai mare decat maxim, atunci ultima cifra devine maxim

       if(n%10>maxim) maxim = n%10;

       //Daca e egala, atunci incrementam numarul de aparitii

       else if(n%10==maxim)ap++;

       //Treci la urmatoarea cifra

       n=n/10;

   }

   //Construim in inv - rasturnatul numarului cautat (copiem toate cifrele, mai putin cifra cu valoarea maxima)

   n = copie;

   int inv=0;

   while(n){

       //Daca cifra e diferita de valoarea maxima adauga la sfarsitul lui inv

       if(n%10 != maxim) inv = inv*10 + n%10;

       //Altfel decrementeaza numarul de aparitii. Daca numarul de aparitii ajunge la 0 nu adauga cifra.

       //Putem sterge o singura aparitie a cifrei. Pentru a garanta ca numarul ce rezulta este cel mai mic trebuie ca aparitia stearsa de noi sa fie cea mai din fata a numarului( procesand numarul de la sfarsit spre inceput, asta inseamna ultima aparitie)

       else{

           ap--;

           if(ap) inv = inv*10 + n%10;

       }

       //Treci la cifra urmatoare

       n=n/10;

   }

   //Construieste inversa lui inv in n (adica numarul cautat de noi)

   while(inv){

       n=n*10+inv%10;

       inv = inv/10;

   }

   //Afiseaza rezultatul

   cout << n;

}


Mghetes: pentru unele cazuri programul functioneaza bine, dar eliminarea primei aparatii a cifrei maxime, nu e cazul ideal. Daca citesti 432652 programul tau afiseaza 43252, eliminand maximul 6, dar daca ai elimina pe 3, ai obtine: 42652, care e minim fata de 43252.
Mghetes: cred ca minimul cautat este: 32652, eliminand cifra 4, care nu e cifra maxima din nr dat
Alte întrebări interesante