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

C++ , rezolvare rog doar cu if,else, while. Sunt incepator. Rog AJUTOR!
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
Date de intrare
1441 4
Date de ieșire
11


Utilizator anonim: #include

using namespace std;

int main() {
int N, C, a = 0, nrcif = 0, nrc = 0, copie, cif, z = 1;
cin >> N >> C;
copie = N;
if (N >= 0 && N < 1000000) {
if (N == 0) {
cout << 0;
}
else {
while (copie) {
++nrcif;
if (copie % 10 == C) {
++nrc;
}
copie /= 10;
}
if (nrcif == nrc) cout << -1;
else {
while (N) {
cif = N % 10;
if (cif != C) {
a = z * cif + a;
z *= 10;
}
N /= 10;
}cout << a;
}
}
return 0;
}
}
Utilizator anonim: anunta-ma daca ai nevoie de explicatie
c10crys: de ce ai pus restrictiile in cod?
c10crys: problema monotonie pana la 0 ai facut-o? ms
Utilizator anonim: mereu aplic restrictiile, dar in cazul acesta puteam sa pun doar N>= 0
Utilizator anonim: am rezolvat si problema cu monotonie pana la 0, ideea este sa intelegi problemele si intai sa incerci sa rezolvi singur. pune pe o foaie cum ar trb sa functioneze codul si in ce ordine, iar dupa scrii codul

Răspunsuri la întrebare

Răspuns de Petruccinator
0

#include <iostream>

using namespace std;

string formatare(string s) {

   if (s.empty())

       return "-1";

   size_t i = 0;

   while (i < s.size()) {

       if (s[i] != '0')

           return s.substr(i);

 

       ++i;

   }

   return "0";

}

string elimina(string s, char c) {

   string a;

   size_t i = 0;

   while (i < s.size()) {

       if (s[i] != c)

           a += s[i];

       

       ++i;

   }

   return formatare(a);

}

int main() {

   string s;

   char c;

   cin >> s >> c;

   cout << elimina(s, c);

}

// Simplificat, fara C++ avansat, mai degraba C cu <iostream>

#include <iostream>

using namespace std;

const char* formatare(char* s) {

   if (!s[0])

       return "-1";

   size_t i = 0;

   while (s[i]) {

       if (s[i] != '0')

           return s + i;

 

       ++i;

   }

   return "0";

}

const char* elimina(char* s, char c) {

   char a[9] = "";

   size_t i = 0, j = 0;

   while (s[i]) {

       if (s[i] != c)

           a[j++] = s[i];

       

       ++i;

   }

   

   i = 0;

   

   while (a[i]) {

       s[i] = a[i];

       ++i;

   }

       

   s[i] = '\0';

   return formatare(s);

}

int main() {

   char s[9] = "", c;

   cin >> s >> c;

   cout << elimina(s, c);

}


Utilizator anonim: te anunt ca pentru o persoana care a invatat doar if si while nu are cum sa inteleaga ce ai scris aici. Mereu da-i raspunsuri super complexe si cu termeni care nu stiu ce ar trb sa faca.
Petruccinator: Te anunt ca in practica C++ este mai complex decat C. Ceea ce ai facut este inca mai complex, deoarece ai utilizat mai multe bucle si operatii de impartire. Si impartirea este considerata o instructiune foarte scumpa ce poate fi executata de un procesor. Daca dorim simplicitate la nivel de piatra, poftim in C.
Petruccinator: Prin mai multe bucle am mentionat convertirea din sir de caractere de intrare in int.
Utilizator anonim: Tocmai ti-am zis ca este incepator si stie sa foloseasca doar if si while. Unde a mentionat ca stie sa foloseasca char sau vectori ?? Citeste inainte sa raspunzi :)
Utilizator anonim: Nu stiu de unde vin problemele astea, dar pare ca el invata ca si mine si suntem cu temele de genul asta in paralel. Eu n-am invatat sa folosesc vectori sau char
c10crys: Multumesc Alex
Alte întrebări interesante