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

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 de simulink
1

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.


mihailv1610: MULTUMESC MULT ! mai revin , pentru ca mai am probleme pe platforma !
simulink: merge 100%?
mihailv1610: cred ca nu ai inteles nici tu ce ai facut!
mihailv1610: nu am inteles, de ce e nevoie de oglindit ?
simulink: :)) am inteles 100% . Vroiam doar sa stiu daca primesti maximul de puncte pt ca cineva mi-a zis ca nu merge pe numere de forma 002, ceea ce mi se pare absurd. ma rog...
simulink: Tu trebuie sa scoti cifrele c din numar. Pentru aceasta vei parcurge fiecare cifra a numarului. Dar cum stergi si refaci numarul la loc? O modalitate este asta cu oglinditul. Parcurg cifrele numarului de la sfarsit catre inceput si le pun "undeva" (in oglindit) doar pe cele care sunt diferite de c. Apoi refac numarul si il afisez.
simulink: Problema este la numerele cu zerouri. am scris in explicatie. Rezolvarea gasita de mine este incadrarea oglinditului intre cifre de 1.
simulink: Poti sa rezolvi si punand fiecare cifra a numarului intr-un vector. Scoti din vector elementele egale cu c si apoi refaci numarul.... Spor!
mihailv1610: AM TRIMIS SOLUTIA TA SI MI-A DAT 100 puncte ! MULTUMESC !
mihailv1610: MULTUMESC SI PENTRU EXPLICATII ! revin cu mai multe probleme !
Alte întrebări interesante