IN C++ , CU WHILE SI CU IF ; Eliminare Apariții 442
Cerință
Andrei, jucător amator de fotbal, are acasă o colecție de mingi. Fiecărei mingi i-a asociat o cifră. Într-o zi a așezat toate mingile într-o linie și și-a dat seama că cifrele de pe mingi formau un număr natural. Și-a mai dat seama și că toate mingile ce aveau scrise cifra C pe ele aveau o nuanță stridentă, așa că a hotărât să le elimine din șir. Care este noul număr format după eliminarea tuturor mingilor cărora le corespunde cifra C? Acum rămâne în sarcina ta să îți dai seama.
Date de intrare
Se citesc de pe aceași linie numărul N și cifra C, reprezentând numărul format cu cifrele mingilor, respectiv cifra ce apare pe mingile ce trebuie eliminate.
Date de ieșire
Se afișează numărul obținut în urma efectuării eliminărilor.
Restricții
N are cel puțin 1 cifră și maxim 8.
Dacă în urma eliminării tuturor aparițiilor cifrei C nu mai rămâne nicio cifră, se va afișa -1, iar dacă vor rămâne numai cifre nule se va afișa 0.
Dacă, în urma eliminărilor, noul număr începe cu unul sau mai mulți de 0 și există alte cifre nenule în noul număr, se vor elimina și acei 0 de la început.
EXEMPLU : 1441 4 ......... 11
VA ROG SA EXPLICATI PUTIN !!! MULTUMESC !
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
int main()
{
int n,c,ogl=1,nr=1;
cin>>n>>c;
if (n==0&& c==0) cout<<-1;
else if (n==0 && c!=0 ) cout<<0;
else
{
while (n!=0)
{
if (n%10!=c) {ogl=ogl*10+n%10; nr=nr*10;}
n=n/10;
}
ogl=ogl*10+1;
while (ogl!=0)
{
n=n*10+ogl%10;
ogl=ogl/10;
}
n=n/10;
if (nr==1) cout<<-1; else cout<<n%nr;
}
return 0;
}
Explicație: Am construit oglinditul numarului, si in construirea acestuia am ignorat cifra c.
Deoarce la refacerea numarului, dispareau unele cifre de 0 , am incadrat oglinditul intre doua cifre de 1, deoarce ogl 200 de expl construit clasic ar fi 2. Dar pe noi ne intereseaza si acele 2 zerouri. Prin urmare, i-a, pus artificial oglinditului un 1 in fata si l-am scos ulterior.
De expl, pt nr 4200 elimin cifra c= 4. Daca pornesc cu ogl=0, vor disparea 0-urile de la sfarsit. Cand refac numarul ramas, adica oglinditul oglinditului, imi va afisa 2, ceea ce nu e corect. Prin urmare, incep cu ogl=1; La sfarsit, adaug un 1 si la sfarsitul oglinditului. Oglinditul nr din care am eliminat cifra 4 va fi 10021 . Oglinditul acestuia e 12001, scot acele cifre de 1 puse de mine artificial si ramane dupa eliminare 200 asa cum ar fi normal.
Am pus 1 la finalul oglinditului ca sa vad care e situatia reala si cand raman doar cifre de 0 dupa eliminarea cifrei c.
Variabila nr ma ajuta sa scap de 1 de la inceputul numarului. Ea va fi puterea lui 10 cu exponent egal cu numarul de cifre al lui n (ramas dupa eliminarea cifrelor c). In final, n=n/10 ma scapa de cifra 1 pusa de mine la sfarsit, iar cand am afisat acel n%nr, practic am scapat de acel 1 pus de mine artificial la inceputul numarului.