Nikako ne mogu da vidim u čemu grešim u ovom zadatku.
Ideja je jednostavna (čini mi se): S[x] je broj brojeva ciji je zbir cifara x, a P[x] je broj brojeva ciji je proizvod cifara x.
Rezultat bi trebao dao zbir proizvoda S[x]*P[x], za x=1..N/2.
Molio bi vas za pomoć.
Evo i koda (prva dva testa prolaze):
Ideja je jednostavna (čini mi se): S[x] je broj brojeva ciji je zbir cifara x, a P[x] je broj brojeva ciji je proizvod cifara x.
Rezultat bi trebao dao zbir proizvoda S[x]*P[x], za x=1..N/2.
Molio bi vas za pomoć.
Evo i koda (prva dva testa prolaze):
Program Z_Cifre;
const
MaxN = 1000 div 2;
MaxS = MaxN * 9;
ModM = 10000;
var
NE: longint;
S,P: array[0..MaxS] of longint;
procedure SumX(n: longint);
var
i,j,k,f,w,z: longint;
begin
FillDWord(S, MaxS+1, 0);
for i:= 0 to 9 do S[i]:= 1;
for k:= 2 to n do begin
if (k < n) then f:= 0 else f:= 1;
for j:= k*9 downto 0 do begin
z:= 0;
for i:= f to 9 do begin
w:= j-i;
if (w >= 0) then z:= z + S[w];
end;
S[j]:= z mod ModM;
end;
end;
end;
procedure MulX(n: longint);
var
i,j,k,z: longint;
begin
FillDWord(P, MaxS+1, 0);
for j:= 1 to 9 do P[j]:= 1;
for k:= 2 to n do begin
for j:= k*9 downto 1 do begin
z:= 0;
for i:= 1 to 9 do begin
if ((j mod i) = 0) then z:= z + P[j div i];
end;
P[j]:= z mod ModM;
end;
end;
end;
procedure DoWork(n: longint);
var
i: integer;
r: int64;
begin
SumX(n);
MulX(n);
r:= 0;
for i:= n*9 downto 1 do r:= (r + (S[i]*P[i]) mod ModM) mod ModM;
writeln(r);
end;
begin
readln(NE);
DoWork(NE div 2);
end.