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

Cerința Valentin, elev în clasa a V-a, e fascinat de cifre. Îi place să mute cifrele unui număr de pe o poziție pe alta. Astfel, pentru un număr N și o cifră k, mută toate cifrele egale cu k la început, după care așază celelalte cifre în ordinea în care apăreau în N. Desigur, există și situații în care numărul cifrelor lui N se micșorează sau situații în care numărul N nu se modifică. De exemplu, dacă numărul N este 134112 și cifra k este 1, după mutarea cifrelor se obține 111342. Pornind de la numărul N și cifra k știți ce număr obține Valentin? Scrieţi un program care să citească numărul natural N şi cifra k și care să determine: a) de câte ori apare cifra k în numărul N; (30% din punctaj) b) numărul obținut după modificarea numărului N; (70% din punctaj) Date de intrare Pe prima linie a fișierului cifre006.in se află numărul natural N și cifra k separate printr-un spațiu. Date de ieșire Fișierul de ieșire cifre006.out va conține două valori, fiecare pe câte un rând. Prima valoare este numărul de cifre k existente în N, iar a doua valoare este numărul obținut din N după modificare.


boiustef: eu am băgat mai multă logică în codul de mai jos, dar cu mai puţină se poate realiza cu un vector a cifrelor...

Răspunsuri la întrebare

Răspuns de boiustef
0

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

   long long int N, copie, k, rep=0, cif, i;

   long long int m=0, ncif=0, z=1;

   ifstream f("cifre006.in");

   ofstream g("cifre006.out");

   f >> N >> k;

   copie=N;

   while (copie)

   {

      cif=copie%10; if (cif==k) { ++rep; m=m*10+cif;}

      copie=copie/10; ++ncif;

   }

   for (cif=1; cif<ncif; ++cif)

       z=z*10;

   g << rep  << "\n";

   if (rep==0) m=N;

   else {

   copie=N; i=0;

   while (i<ncif)

   {

       ++i;

       cif=copie/z;

       if (cif != k)

       { if (cif != 0) m=m*10+cif;

           else m*=10; }

       copie=copie%z; z=z/10;

   }}

   g << m << "\n";

   f.close();  g.close();

   return 0;

}


tbithebestianis: nu a mers
boiustef: La tine nu a mers, dar confirmare ca codul e corect:
Detalii
Problema cifre006 Operații I/O cifre006.in/cifre006.out
Limita timp 0.1 secunde Limita memorie Total: 64 MB / Stivă 8 MB
Id soluție #9988924 Utilizator Boiu Stefan (stefan52)
Fișier cifre006.cpp Dimensiune 773 B
Data încărcării 08 Iulie 2018, 12:05 Scor / rezultat 100 puncte
boiustef: nu ştii să iai codul de aici... iată nişte sfaturi:
Ca sa stii, in momentul cand copiezi un cod de pe brainly si acesta are "spatii" la inceput, cand copiezi programu' o sa-ti arate ceva genu' ( https://prnt.sc/n6n3kr ) Eroarea ta sunt liniile alea rosii.. Copiaza codu' in word sau in ceva si dupa pune l in codeblocks sau in ce ai testat tu programu'. Sau pur si simplu sterge fiecare spatiu de la inceput..
boiustef: sper acum să meargă...
Alte întrebări interesante