回 帖 发 新 帖 刷新版面

主题:[讨论]程序不能运行,求解。

【题目描述】
摩尔庄园里所有的快乐都由小摩尔们一起创造,一起分享,除了庄园入口,摩尔庄园的围墙也是由小摩尔志愿者重兵把守。
这些志愿者在执勤的时候是不能说话,但是相邻小摩尔们可以手牵手进行无声交流。为了保证执勤的秩序,规定不允许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
【输出样例】


程序:
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.

回复列表 (共2个回复)

沙发

用数学模型算了下。。答案应该是C(n+1,n-1)-C(n-1,n-2)。。。
即输出(n+1)*n/2-(n-1)...

板凳

期待高人指点了

















signature-----------------------------Living without an aim is like sailing without a compass[url=http://www.kobe4sale.com/nike-zoom-hyperfuse-c-6.html]nike zoom hyperfuse[/url][url=http://www.kobe4sale.com/nike-zoom-hyperfuse-2011-c-7.html]nike zoom hyperfuse 2011[/url][url=http://www.kobe4sale.com/nike-zoom-hyperfuse-low-c-8.html]nike zoom hyperfuse low[/url][url=http://www.kobe4sale.com/nike-air-zoom-vapor-vi-tour-c-23.html]nike air zoom vapor vi tour[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册