主题:急!急!急!
编程黑客
[专家分:1660] 发布于 2005-11-24 22:51:00
1 有N个人,从底A个人数起,按顺时针方向数到第B个人出去,再按逆时针方向数到第C个人出去,直至剩下1个人.输出出去人的编号顺序.
2 求1!+2!+3!+4!+5!+……!+N!= (N<=10000)
[size=5]急!急!急! 做出来的加30分!!![/size]
回复列表 (共15个回复)
11 楼
封天怒龙 [专家分:160] 发布于 2005-12-11 17:39:00
若还有错,请多见谅
12 楼
编程黑客 [专家分:1660] 发布于 2005-12-16 19:09:00
谢谢,可是不懂,能讲一下吗?
13 楼
绿步甲 [专家分:1610] 发布于 2005-12-16 19:15:00
10楼做得不对呀
这一到一定要用高精度
14 楼
michaellyz [专家分:270] 发布于 2005-12-17 20:09:00
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 楼
编程黑客 [专家分:1660] 发布于 2005-12-25 20:23:00
Sorry,可以讲一下吗?
还有组合,排列,我虽然背下来了,但不懂,能讲讲吗?
下周日要考试,帮帮忙吧![em12]
我来回复