回 帖 发 新 帖 刷新版面

主题:急!急!急!

1 有N个人,从底A个人数起,按顺时针方向数到第B个人出去,再按逆时针方向数到第C个人出去,直至剩下1个人.输出出去人的编号顺序.

2 求1!+2!+3!+4!+5!+……!+N!=  (N<=10000)



[size=5]急!急!急!  做出来的加30分!!![/size]

回复列表 (共15个回复)

11 楼

若还有错,请多见谅

12 楼

谢谢,可是不懂,能讲一下吗?

13 楼

10楼做得不对呀
这一到一定要用高精度

14 楼

const
  max = 50000;
var
  a,t        : array[0..max] of longint;
  b          : array[1..max,1..2] of longint;
  i,k,n,maxn : longint;

procedure p_end;
begin
  close(input); close(output); halt;
end;

begin
  assign(input,'fire.in'); reset(input);
  assign(output,'fire.out'); rewrite(output);
  readln(n);
  for i := 1 to n do readln(b[i,1],b[i,2]);
  a[0] := 1; k := 1;
  for i := 1 to n do begin
    a[i] := b[a[i-1],k];
    if b[a[i],1] = a[i-1]
      then k := 2
      else if b[a[i],2] = a[i-1]
             then k := 1
             else begin writeln(-1); p_end; end;
    if (i < n) and (a[i] = 1) then begin writeln(-1); p_end; end;
  end;
  if a[n] <> 1 then begin writeln(-1); p_end; end;
  fillchar(t,sizeof(t),0);
  for i := 1 to n do inc(t[(a[i]-i+n)mod n]);
  maxn := 0;
  for i := 0 to n-1 do if t[i] > maxn then maxn := t[i];
  fillchar(t,sizeof(t),0);
  for i := 1 to n do inc(t[(a[i]+i)mod n]);
  for i := 0 to n-1 do if t[i] > maxn then maxn := t[i];
  writeln(n-maxn);
  p_end;
end.

15 楼

Sorry,可以讲一下吗?
还有组合,排列,我虽然背下来了,但不懂,能讲讲吗?
下周日要考试,帮帮忙吧![em12]

我来回复

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