讨论 / 大牛 来看看 高分
LQY 2009-10-04 06:10:00
点我顶贴 收藏 删除
程序哪错了?

不是很长

希望帮忙看看

program mouse;

var a,b:array[1..3000] of longint;

x,y,z,i,j,k,m,n,t,s:longint;

begin

read(x,y,z,n);

a[1]:=1;

b[1]:=1;

for i:=2 to n do

begin

b[i]:=b[i]+b[i-1]*x;

if i>2 then b[i]:=b[i]+b[i-2]*y;

for j:=1 to i-3 do

b[i]:=b[i]+b[j]*z;

a[i]:=a[i]+b[i]+a[i-1];

end;

write(a[n]*2);

end.

#1 binarie@2008-07-10 01:48:00
回复 删除
这题数据巨大

你得高精度啊

#2 binarie@2008-07-10 01:49:00
回复 删除
我给你来个超长的代码...

program p183;

const dn=5;

const ml=6000;

const hpbyte=10000;

var

digs:array[1..dn] of array[1..ml] of longint;

diglen:array[1..dn] of integer;

incstep:array[1..3] of integer;

inctime:integer;

k,j:integer;

zero:array[0..5] of string;

tmplen:integer;

pos:integer;

{hd section - begin}

procedure clear(i:integer);

begin

digs[i]:=digs[5];

diglen[i]:=0;

end;

procedure init();

var i:integer;

begin

for i:=1 to dn do

clear(i);

end;

procedure mov(i1,i2:integer);

begin

digs[i1]:=digs[i2];

diglen[i1]:=diglen[i2];

end;

procedure sum(i1,i2:integer);

var i,digpos:integer;

begin

tmplen:=diglen[i1];

if(diglen[i2]>tmplen)then tmplen:=diglen[i2];

for i:=1 to tmplen do

begin

digs[i1][i]:=digs[i1][i]+digs[i2][i];

end;

end;

procedure multiex();

var i,digpos:integer;

begin

tmplen:=diglen[1];

if(diglen[2]>tmplen)then tmplen:=diglen[2];

if(diglen[3]>tmplen)then tmplen:=diglen[3];

for i:=1 to tmplen do

begin

digs[4][i]:=digs[1][i]*incstep[1];

digs[4][i]:=digs[4][i]+digs[2][i]*incstep[2];

digs[4][i]:=digs[4][i]+digs[3][i]*incstep[3];

if(i>diglen[4])then

diglen[4]:=i;

end;

end;

procedure collect();

var j,k:integer;

begin

for j:=1 to 3 do

begin

tmplen:=diglen[j];

for k:=1 to tmplen do

begin

digs[j][k+1]:=digs[j][k+1]+(digs[j][k] div hpbyte);

if(digs[j][k+1]>0)then

if(k+1>diglen[j])then

diglen[j]:=k+1;

digs[j][k]:=digs[j][k] mod hpbyte;

end;

end;

end;

{hd section - end}

function fill(num:longint):string;

begin

fill:=zero[3-trunc(ln(num)/ln(10))];

end;

begin

zero[0]:=;

for k:=1 to 5 do

zero[k]:=zero[k-1]+0;

fillchar(digs[5],sizeof(digs[5]),0);

readln(incstep[1],incstep[2],incstep[3],inctime);

init();

digs[1][1]:=1;

diglen[1]:=1;

for k:=1 to inctime do

begin

multiex();

sum(3,2);

mov(2,1);

mov(1,4);

collect();

end;

sum(1,2);

sum(1,3);

collect();

pos:=0;

for k:=diglen[1] downto 1 do

begin

if((pos=0)and(digs[1][k]>0))then pos:=k;

if(pos>0)then

if(pos=k)then

write(digs[1][k])

else

write(fill(digs[1][k]),digs[1][k]);

end;

end.

#3 LQY@2008-07-10 01:54:00
回复 删除
不说别的……

先不管高精度

这个程序连样例都过不了……

为什么

#4 binarie@2008-07-10 02:05:00
回复 删除
Orz..

我发现我看不懂你程序的意思了...

不过似乎是思路有点问题...

每天的变化应该是

temp:=小*a+中*b+老*c;

老:=中+老;

中:=小;

小:=temp;

#5 LQY@2008-07-10 02:38:00
回复 删除
我知道是这个规律……

还有 楼上 那个式子不是你写的吧……

我来解释解释

a[i]指到第i个月一共有多少只老鼠

b[i]指第i月新生出多少只老鼠

#6 binarie@2008-07-10 03:07:00
回复 删除
我疯了.

刚才看了半天愣是看不出来哪对...

#7 LQY@2008-07-10 03:50:00
回复 删除
不是吧

……

#8 LQY@2008-07-10 03:51:00
回复 删除
如果输入0 1 1 2

会输出什么

#9 lxm@2008-07-11 04:02:00
回复 删除
谁来讲讲
#10 181818181818@2008-07-11 17:57:00
回复 删除
program rqnoj183;

var a,b,c,n:int64;

f,s:array[-2..3000,1..600]of int64;

i,j:integer;

t:boolean;

begin

readln(a,b,c,n);

f[0,1]:=1;

s[0,1]:=1;

for i:=1 to n do

begin

for j:=1 to 599 do

begin

f[i,j]:=f[i,j]+s[i-3,j]*c;

f[i,j]:=f[i,j]+f[i-2,j]*b;

f[i,j]:=f[i,j]+f[i-1,j]*a;

if f[i,j]>=10000000000 then

begin

f[i,j+1]:=f[i,j+1]+f[i,j]div 10000000000;

f[i,j]:=f[i,j]mod 10000000000;

end;

s[i,j]:=s[i,j]+s[i-1,j]+f[i,j];

if s[i,j]>=10000000000 then

begin

s[i,j+1]:=s[i,j+1]+s[i,j]div 10000000000;

s[i,j]:=s[i,j]mod 10000000000;

end;

end;

end;

t:=false;

for i:=600 downto 1 do

begin

if(s[n,i]>0)and(not(t))then

begin

t:=true;

write(s[n,i]);

continue;

end;

if t then

begin

case s[n,i] of

0..9:write(000000000,s[n,i]);

10..99:write(00000000,s[n,i]);

100..999:write(0000000,s[n,i]);

1000..9999:write(000000,s[n,i]);

10000..99999:write(00000,s[n,i]);

100000..999999:write(0000,s[n,i]);

1000000..9999999:write(000,s[n,i]);

10000000..99999999:write(00,s[n,i]);

100000000..999999999:write(0,s[n,i]);

else write(s[n,i]);

end;

end;

end;

end.

查看更多回复
提交回复