Stari dobri USACO zadatak.. skoro pa gotov!
17.07.2005. u 23:24 · pre 258 meseci
#1
Vidim da se nista ne desava na ovom dijelu foruma, pa reko' da malo pokrenem stvari sa mrtve tacke. Zanima me rjesenje sledeceg zadatka: Dat je beskonacan niz cifara (123456789101112...), odrediti n-tu cifru niza. Evo kako sam ja to rjesio (tacnije ovaj kod jos ne radi, ali mislim da sm koncept rjesenja dobro zamislio). Medjutim iako sam izbjegao koristenje niza, ipak je moj program teoretski ogranicen na maxlongint, jer je to max vrijednost brojaca. Da li bi se to priznalo na takmicenju?
*pod-broj je broj 1..beskonacno ciji niz zapravo cini zadani beskonacni broj.
Ponovo napominjem da rjesenje jos ne radi, ali koncept rjesenja bi trebao biti ovakav... ili ne? :)
Code:
program pas;
uses wincrt;
var br,cif,n,temp,vre:longint;
function Br_cifara (n:integer):integer;
var s:string;
begin
str (n,s);
Br_cifara:=length(s);
end;
function djelilac (n:integer):integer;
var i,st:integer;
begin
st:=1;
for i:=0 to n-2 do
st:=st*10;
djelilac:=st;
end;
begin
cif:=0; br:=0; vre:=0;
write ('n='); {podaci se za sada ucitavaju sa tastature}
readln (n);
while cif<n do {radi dok ne dodjes do trazene cifre}
begin
inc(br,1); {povecaj pod-broj* za 1}
temp:=br;
repeat
inc(cif,1);
vre:=temp div djelilac(br_cifara(temp)); {vre pamti vrijednost za cifru cif}
temp:=temp div 10; {omogucuje izracunavanje sledece cifre pod-broja}
until temp=0;
end;
write ('vre=',vre);
end.
program pas;
uses wincrt;
var br,cif,n,temp,vre:longint;
function Br_cifara (n:integer):integer;
var s:string;
begin
str (n,s);
Br_cifara:=length(s);
end;
function djelilac (n:integer):integer;
var i,st:integer;
begin
st:=1;
for i:=0 to n-2 do
st:=st*10;
djelilac:=st;
end;
begin
cif:=0; br:=0; vre:=0;
write ('n='); {podaci se za sada ucitavaju sa tastature}
readln (n);
while cif<n do {radi dok ne dodjes do trazene cifre}
begin
inc(br,1); {povecaj pod-broj* za 1}
temp:=br;
repeat
inc(cif,1);
vre:=temp div djelilac(br_cifara(temp)); {vre pamti vrijednost za cifru cif}
temp:=temp div 10; {omogucuje izracunavanje sledece cifre pod-broja}
until temp=0;
end;
write ('vre=',vre);
end.
*pod-broj je broj 1..beskonacno ciji niz zapravo cini zadani beskonacni broj.
Ponovo napominjem da rjesenje jos ne radi, ali koncept rjesenja bi trebao biti ovakav... ili ne? :)
Re: Stari dobri USACO zadatak.. skoro pa gotov!
