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
#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;
}