Description
轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示
N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
同的3轮状病毒,如下图所示
现给定n(N<=100),编程计算有多少个不同的n轮状病毒
Input
第一行有1个正整数n
Output
计算出的不同的n轮状病毒数输出
Sample Input
3
Sample Output
16
做完之后到网上看了看题解。。
基尔霍夫矩阵。是什么??
没学过。。
反正 我就纯暴力手算出了前几个。。。(其实到第四个就数不下去了)
然后发(kan)现(ti)了(jie)规律。嗯哼。
贴下代码。
var
i,j,k,t,n:longint;
f:array[1..500]of string;
s:string;
function jia(s:string;x:longint):string;
var
i,j,k,t:longint;
begin
t:=x;
for i:=length(s) downto 1 do
begin
k:=ord(s[i])-48;
inc(k,t);
t:=0;
if k>=10 then begin dec(k,10);t:=1;end;
s[i]:=chr(k+48);
end;
if t=1 then s:='1'+s;
jia:=s;
end;
function jian(s1,s2:string):string;
var
i,j,k,t,x,y:longint;
begin
while length(s2)<length(s1) do
s2:='0'+s2;
t:=0;
for i:=length(s1) downto 1 do
begin
x:=ord(s1[i])-48;
y:=ord(s2[i])-48;
if t=0 then begin
if x>=y then dec(x,y)
else begin inc(x,10);dec(x,y);t:=1;end;end
else
if x-1>=y then begin x:=x-1-y;t:=0;end
else begin inc(x,9);dec(x,y);t:=1;end;
s[i]:=chr(x+48);
end;
jian:=s;
end;
function cheng(s:string;x:longint):string;
var
i,j,k,t:longint;
begin
t:=0;
for i:=length(s) downto 1 do
begin
k:=ord(s[i])-48;
k:=k*x+t;
t:=0;
if k>=10 then begin t:=k div 10;k:=k mod 10;end;
s[i]:=chr(k+48);
end;
if t<>0 then s:=chr(t+48)+s;
cheng:=s;
end;
begin
readln(n);
f[1]:='1';
f[2]:='5';
for i:=3 to n do
begin
s:=cheng(f[i-1],3);
s:=jian(s,f[i-2]);
s:=jia(s,2);
f[i]:=s;
end;
writeln(f[n]);
end.
i,j,k,t,n:longint;
f:array[1..500]of string;
s:string;
function jia(s:string;x:longint):string;
var
i,j,k,t:longint;
begin
t:=x;
for i:=length(s) downto 1 do
begin
k:=ord(s[i])-48;
inc(k,t);
t:=0;
if k>=10 then begin dec(k,10);t:=1;end;
s[i]:=chr(k+48);
end;
if t=1 then s:='1'+s;
jia:=s;
end;
function jian(s1,s2:string):string;
var
i,j,k,t,x,y:longint;
begin
while length(s2)<length(s1) do
s2:='0'+s2;
t:=0;
for i:=length(s1) downto 1 do
begin
x:=ord(s1[i])-48;
y:=ord(s2[i])-48;
if t=0 then begin
if x>=y then dec(x,y)
else begin inc(x,10);dec(x,y);t:=1;end;end
else
if x-1>=y then begin x:=x-1-y;t:=0;end
else begin inc(x,9);dec(x,y);t:=1;end;
s[i]:=chr(x+48);
end;
jian:=s;
end;
function cheng(s:string;x:longint):string;
var
i,j,k,t:longint;
begin
t:=0;
for i:=length(s) downto 1 do
begin
k:=ord(s[i])-48;
k:=k*x+t;
t:=0;
if k>=10 then begin t:=k div 10;k:=k mod 10;end;
s[i]:=chr(k+48);
end;
if t<>0 then s:=chr(t+48)+s;
cheng:=s;
end;
begin
readln(n);
f[1]:='1';
f[2]:='5';
for i:=3 to n do
begin
s:=cheng(f[i-1],3);
s:=jian(s,f[i-2]);
s:=jia(s,2);
f[i]:=s;
end;
writeln(f[n]);
end.
蒟蒻代码大神勿吐槽