Buna am si eu o problema la tema pbinfo #2442 cifre006 pe care nu stiu sa o rezolv,daca are cineva o rezolvare de 100 puncte va rog sa ma ajutati si daca puteti si o explicatie va rog.
Răspunsuri la întrebare
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)
Solutie:
#include <fstream>
using namespace std;
ifstream fin ("cifre006.in");
ofstream fout("cifre006.out");
int main(){
long long n, x = 0, p = 1, y = 0, z;
int nr = 0, k, a = 0;
fin >> n >> k;
while (n > 0){
if (n%10 == k)
a++, x = x*10+k;
else
nr++, y += n%10*p, p *= 10;
n /= 10;
}
p = 1;
while (nr){
p *= 10;
nr--;
}
x *= p;
z = x + y;
fout << a << '\n' << z;
fin.close();
fout.close();
return 0;
}
#include <fstream>
using namespace std;
ifstream fin("cifre006.in");
ofstream fout("cifre006.out");
int N, k, cif, ap, p = 1, N1, N2;
int main()
{
fin >> N >> k;
while(N)
{
cif = N % 10;
if(cif == k)
{
ap++;
N1 = N1 * 10 + cif;
}
else
{
N2 = N2 + cif * p;
p = p * 10;
}
N = N / 10;
}
fout << ap << '\n' <<N1*p+N2;
return 0;
}