主题:[讨论]程序不能运行,求解。
【题目描述】
摩尔庄园里所有的快乐都由小摩尔们一起创造,一起分享,除了庄园入口,摩尔庄园的围墙也是由小摩尔志愿者重兵把守。
这些志愿者在执勤的时候是不能说话,但是相邻小摩尔们可以手牵手进行无声交流。为了保证执勤的秩序,规定不允许4个或更多的人联系在一起。
守卫庄园的小摩尔们每天数量不一。现在可可要回答出他们有多少种牵手方式,才能在他们的注目礼中,昂首挺胸步入摩尔庄园。
例如,总共有4个人,那么可以有以下7种方式:
1,1,1,1
1,2,1
1,1,2
2,1,1
2,2
1,3
3,1
你能不能帮助可可解决这个问题呢?
【输入文件】key.in
共一行。一个1~10000的正整数n,表示共有n个小摩尔。
【输出文件】key.out
共一行。输出一个正整数表示n个小摩尔牵手的方式数目。
【输入样例】
4
【输出样例】
7
程序:
var
n,l,lm,m1,s,sa,i:longint;
a:array[1..3333] of 2..3;
function orz(l,p:longint):longint;
var
q,i:longint;
o:array[1..3333] of longint;
begin
for i:=1 to p do o[i]:=i;
repeat
q:=p;
o[q]:=o[q]+1;
while o[q]>l+1-p-1+q do begin
o[q]:=q;
q:=q-1;
if q=0 then exit;
for i:=q to p do o[i]:=o[i]+1
end;
orz:=orz+1;
until q=0
end;
begin
readln(n);
l:=0; lm:=0; m1:=n; s:=1; a[1]:=2; sa:=2;
repeat
m1:=m1-sa+1;
lm:=l+m1;
if m1>=1 then s:=s+orz(lm,l);
for i:=1 to 3332 do begin
a[i]:=a[i]+1; if a[i]>3 then begin a[i]:=2; a[i+1]:=a[i+1]+1 end end;
for l:=1 to 3333 do
if a[l]>=2 then sa:=sa+a[l] else break; sa:=0;
until sa>n*1.5;
writeln(s);
end.
摩尔庄园里所有的快乐都由小摩尔们一起创造,一起分享,除了庄园入口,摩尔庄园的围墙也是由小摩尔志愿者重兵把守。
这些志愿者在执勤的时候是不能说话,但是相邻小摩尔们可以手牵手进行无声交流。为了保证执勤的秩序,规定不允许4个或更多的人联系在一起。
守卫庄园的小摩尔们每天数量不一。现在可可要回答出他们有多少种牵手方式,才能在他们的注目礼中,昂首挺胸步入摩尔庄园。
例如,总共有4个人,那么可以有以下7种方式:
1,1,1,1
1,2,1
1,1,2
2,1,1
2,2
1,3
3,1
你能不能帮助可可解决这个问题呢?
【输入文件】key.in
共一行。一个1~10000的正整数n,表示共有n个小摩尔。
【输出文件】key.out
共一行。输出一个正整数表示n个小摩尔牵手的方式数目。
【输入样例】
4
【输出样例】
7
程序:
var
n,l,lm,m1,s,sa,i:longint;
a:array[1..3333] of 2..3;
function orz(l,p:longint):longint;
var
q,i:longint;
o:array[1..3333] of longint;
begin
for i:=1 to p do o[i]:=i;
repeat
q:=p;
o[q]:=o[q]+1;
while o[q]>l+1-p-1+q do begin
o[q]:=q;
q:=q-1;
if q=0 then exit;
for i:=q to p do o[i]:=o[i]+1
end;
orz:=orz+1;
until q=0
end;
begin
readln(n);
l:=0; lm:=0; m1:=n; s:=1; a[1]:=2; sa:=2;
repeat
m1:=m1-sa+1;
lm:=l+m1;
if m1>=1 then s:=s+orz(lm,l);
for i:=1 to 3332 do begin
a[i]:=a[i]+1; if a[i]>3 then begin a[i]:=2; a[i+1]:=a[i+1]+1 end end;
for l:=1 to 3333 do
if a[l]>=2 then sa:=sa+a[l] else break; sa:=0;
until sa>n*1.5;
writeln(s);
end.