搜档网
当前位置:搜档网 › 小学生计算机编程经典算法

小学生计算机编程经典算法

小学生计算机编程经典算法
小学生计算机编程经典算法

1.求两数的最大公约数

if a

function gcd(a,b:qword):qword;

begin

if b=0 then gcd:=a

else gcd:=gcd(b,a mod b);

end;

2.求两数的最小公倍数

function lcm(a,b:qword):qword;

begin

if a

lcm:=a div gcd(a,b)*b;

end;

3.素数的求法

function prime (n: integer): boolean;

var i: integer;

begin

for i:=2 to trunc(sqrt(n)) do

if n mod i=0 then

begin

prime:=false; exit;

end;

prime:=true;

end;

排序算法

1.快速排序:

procedure qsort(l,r:integer);

var i,j,mid:integer;

begin

i:=l;j:=r; mid:=a[(l+r) div 2]; {将当前序列在中间位置的数定义为中间数} repeat

while a

while a[j]>mid do dec(j);{在右半部分寻找比中间数小的数}

if i<=j then

begin {若找到一组与排序目标不一致的数对则交换它们}

swap(a[i],a[j]);

inc(i);dec(j); {继续找}

until i>j;

if l

end;{sort}

2.选择排序:

procedure sort;

var i,j,k:integer;

begin

for i:=1 to n-1 do

for j:=i+1 to n do

if a[i]>a[j] then swap(a,a[j]);

end;

3. 冒泡排序

procedure bubble_sort;

var i,j,k:integer;

begin

for i:=1 to n-1 do

for j:=n downto i+1 do

if a[j-1]

4.归并排序

procedure merge;

var i,j,k:longint;

begin

i:=1;j:=1;k:=1;

while (i<=n)and(j<=m) do

if a[i]

else begin c[k]:=b[j];inc(j);inc(k); end;

while j<=m do begin c[k]:=b[j];inc(j);inc(k); end;

while i<=n do begin c[k]:=a[i];inc(i);inc(k); end;

end;

闰年

if (y mod 400=0) or((y mod 100<>0) and (y mod 4=0)) then y:=' 闰年';

高精度计算

1.高精度加法

function plus(a,b:ansistring):ansistring;

var

m,n:array[1..5000] of integer;

i,j:integer;

la,lb,len:integer;

begin

la:=length(a);

lb:=length(b);

fillchar(m,sizeof(m),0);

fillchar(n,sizeof(n),0);

for i:=1 to la do m[i]:=ord(a[la-i+1])-ord('0');

for i:=1 to lb do n[i]:=ord(b[lb-i+1])-ord('0');

if la>lb then

len:=la

else

len:=lb;

for i:=1 to len do

m[i]:=m[i]+n[i];

for i:=1 to len do

if m[i]>=10 then

begin

m[i+1]:=m[i+1]+m[i] div 10;

m[i]:=m[i] mod 10;

end;

plus:='';

j:=4500;

while m[j]=0 do dec(j);

for i:=j downto 1 do plus:=plus+chr(m[i]+ord('0')); end;

2.高精度减法

function substract(a,b:ansistring):ansistring;

var

m,n:array[1..5000] of integer;

i,j:integer;

la,lb,len:integer;

begin

la:=length(a);

lb:=length(b);

fillchar(m,sizeof(m),0);

fillchar(n,sizeof(n),0);

for i:=1 to la do m[i]:=ord(a[la-i+1])-ord('0');

for i:=1 to lb do n[i]:=ord(b[lb-i+1])-ord('0');

if la>lb then

len:=la

else

len:=lb;

for i:=1 to len do

if m[i]>=n[i] then

m[i]:=m[i]-n[i]

else

begin

m[i]:=m[i]+10-n[i];

m[i+1]:=m[i+1]-1;

end;

substract:='';

j:=4500;

while m[j]=0 do dec(j);

for i:=j downto 1 do substract:=substract+chr(m[i]+ord('0')); end;

3.高精度乘法

function multiply(a,b:string):string;

var

m,n,o:array[1..5000] of longint;

i,j,la,lb,x:longint;

begin

la:=length(a);

lb:=length(b);

fillchar(m,sizeof(m),0);

fillchar(n,sizeof(n),0);

fillchar(o,sizeof(o),0);

for i:=1 to la do m[i]:=ord(a[la-i+1])-48;

for i:=1 to lb do n[i]:=ord(b[lb-i+1])-48;

for i:=1 to la do

begin

x:=0;

for j:=1 to lb do

begin

o[i+j-1]:=m[i]*n[j]+x+o[i+j-1];

x:=o[i+j-1] div 10;

o[i+j-1]:=o[i+j-1] mod 10;

end;

o[i+j]:=x;

end;

multiply:='';

j:=4500;

while (o[j]=0) and(j>1) do dec(j);

for i:=j downto 1 do multiply:= multiply +chr(o[i]+48); end;

4.高精度除法

var x:longint;//余数

function devide(s:ansistring;n:longint):ansistring;

var

a,c:array[1..5000] of longint;

i,j,la:longint;

begin

fillchar(a,sizeof(a),0);

fillchar(c,sizeof(c),0);

la:=length(s);

for i:=1 to la do a[i]:=ord(s[i])-48;

x:=0;

for i:=1 to la do

begin

c[i]:=(a[i]+x*10) div n;

x:=(a[i]+x*10) mod n;

end;

j:=1;

devide:='';

while (c[j]=0)and(j

for i:=j to la do devide:= devide +chr(c[i]+48);

end;

0-1背包:

var

n,m,i,x:longint;

f:array[0..10000] of longint;

w,c:array[1..2000] of longint;

begin

fillchar(f,sizeof(f),0);//必须要

readln(m,n);//背包容量m物品数n

for i:=1 to n do readln(w[i],c[i]);//每个物品的重量w价值c

for i:=1 to n do

for x:=m downto w[i] do//注意downto

if f[x-w[i]]+c[i]>f[x] then f[x]:=f[x-w[i]]+c[i];//f(x)为重量不超过x的最大价值writeln(f[m]);//f(m)为最后的最优解

end.

折半查找

function binsearch(x,l,r:longint):longint;

var

m:longint;

begin

m:=(l+r) div 2;

if l>r then binsearch:=0

else

if a[m]=x then binsearch:=m

else

if x>a[m] then

binsearch:=binsearch(x,m+1,r)

else

binsearch:=binsearch(x,l,m-1);

end;

相关主题