Cerința
Fie un număr natural a
având n
cifre. Scrieţi un program care să determine un număr natural x
cu proprietatea că este cel mai mic număr mai mare decât a
, care are exact aceleaşi cifre ca şi numărul a
.
Date de intrare
Fișierul de intrare numar2.in
conține două linii:
- pe prima linie un număr natural reprezentând valoarea lui
n
; - pe a doua linie, fără spaţii între ele,
n
cifre reprezentând numărula
.
Date de ieșire
Fișierul de ieșire numar2.out
va conține o singură linie pe care se va afla numărul x
.
Restricții și precizări
1 ≤ n ≤ 5.000.000
;- pentru
50%
dintre teste,n ≤ 1.000.000
; - pentru toate datele de test există soluţie.
Exemplu
numar2.in
6 204924
numar2.out
204942
Explicație
Există mai multe numere formate din exact aceleaşi cifre ca şi numărul 204924
mai mari decât el. Dintre acestea, 204942
este cel mai mic.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Numar2:
var f,g:text;
n,i,j,k:longint;
c:array[0..9] of longint;
poz:longint;
cif,a,b:byte;
buf:char;
begin
assign(f,'numar2.in'); reset(f);
assign(g,'numar2.out'); rewrite(g);
readln(f,n);
poz := 0;
read(f,buf);
a := ord(buf) - 48;
inc(c[a]);
for i := 2 to n do
begin
read(f,buf);
b := ord(buf) - 48;
if a>=b then inc(c[b])
else
begin
poz := i-1;
for j := 0 to 9 do c[j]:=0;
inc(c[b]);
cif := a;
end;
a := b;
end;
reset(f);
readln(f,n);
for i := 1 to poz-1 do
begin
read(f,buf);
write(g,buf)
end;
for j := cif+1 to 9 do
if c[j]<>0 then
begin
write(g,j);
dec(c[j]);
break
end;
inc(c[cif]);
for j := 0 to 9 do
for k := 1 to c[j] do
write(g,j);
writeln(g);
close(g);
end.
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #742 Numar2
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #742 Numar2 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!