琪露诺(冰之妖精)有操控冷气的能力。能瞬间冻结小东西,比普通的妖精更危险。一直在释放冷气的她周围总是非常寒冷。
由于以下三点原因……
所以琪露诺便得到了“笨蛋”的别称。
某日,琪露诺又2了……
她写了N封信要装到N个信封里面,却全都装错了……现在想知道有多少种装错的可能性。
信和信封的数量N。
装错的可能性的数量。
1≤N≤100
看题面最后一句话,就是求错排数,也就是将N封信全部错装到N个信箱里(不允许有一个是装对的).
1 uses math;
2 var ss:ansistring;
3 var f:array[0..1000] of ansistring;
4 var n,i:longint;
5 function time(s1,s2:ansistring):ansistring;//高精度乘法
6 var len1,len2,i,j,x,l:longint;
7 var a,b,c:array[1..100000] of longint;
8 var ss:string;
9 begin
10 len1:=length(s1);len2:=length(s2);ss:=‘‘;
11 fillchar(a,sizeof(a),0);fillchar(b,sizeof(b),0);fillchar(c,sizeof(c),0);
12 for i:=1 to len1 do a[len1-i+1]:=ord(s1[i])-48;
13 for i:=1 to len2 do b[len2-i+1]:=ord(s2[i])-48;
14 for i:=1 to len1 do
15 for j:=1 to len2 do
16 begin
17 c[i+j-1]:=c[i+j-1]+a[i]*b[j];
18 c[i+j]:=c[i+j]+c[i+j-1] div 10;
19 c[i+j-1]:=c[i+j-1] mod 10;
20 end;
21 for i:=len1+len2 downto 1 do if c[i]<>0 then begin l:=i;break; end;
22 for i:=l downto 1 do ss:=ss+chr(c[i]+48);
23 exit(ss);
24 end;
25 function add(s1,s2:ansistring):ansistring;//高精度加法
26 var len1,len2,i,x,l:longint;
27 var a,b,c:array[1..10000] of longint;
28 var ss,p:string;
29 begin
30 len1:=length(s1);len2:=length(s2);ss:=‘‘;p:=‘‘;
31 fillchar(a,sizeof(a),0);fillchar(b,sizeof(b),0);
32 for i:=1 to len1 do a[len1-i+1]:=ord(s1[i])-48;
33 for i:=1 to len2 do b[len2-i+1]:=ord(s2[i])-48;
34 i:=0;x:=0;
35 for i:=1 to max(len1,len2) do
36 begin
37 x:=x+a[i]+b[i];
38 c[i]:=x mod 10;
39 x:=x div 10;
40 end;
41 if x>0 then begin l:=i+1;c[l]:=1; end else l:=i;
42 for i:=l downto 1 do ss:=ss+chr(c[i]+48);
43 exit(ss);
44 end;
45 begin
46 readln(n);
47 if n=1 then begin writeln(0);halt; end;
48 if n=2 then begin writeln(1);halt; end;
49 f[1]:=‘0‘;f[2]:=‘1‘;//定初值
50 for i:=3 to n do
51 begin
52 str(i-1,ss);
53 f[i]:=time(ss,add(f[i-1],f[i-2]));//递推式
54 end;
55 writeln(f[n]);
56 end.
欢迎转载,若转载请注明出处.
原文:http://www.cnblogs.com/HAdolf-HQY/p/6493036.html