需要记忆的算法(new)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

需要记忆的算法:

-1 pascal 运算优先级

1not

2and * / div mod 3or xor + -

4 in = > < >= <=

0. 文件的输入和输出:

begin

assign(input,'p1.in'); reset(input);

assign(output,'p1.out'); rewrite(output);

for i:=1 to 20 do readln(a[i]);

sum:=0;

for i:=1 to 20 do sum:=sum+a[i];

writeln(sum);

close(input);

close(output);

end.

1. 素数的判断:

function ok(x:longint):boolean;

var i:longint;

begin

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

if x mod i=0 then exit(false);

exit(true);

end;

2.选择排序

For i:=1 to n-1 do

For j:=i+1 to n do

If a[j]>a[i] then begin t:=a[j];a[j]:=a[i];a[i]:=t;end;

3.二进制枚举法:

Fillchar(b,sizeof(b),0);

while b[0]=0 do

begin

j:=m; \\第m位为最低位。

while b[j]=1 do dec(j); \\从最低位开始找非1 的位子;

b[j]:=1; \\该位置1;

for i:=j+1 to m do b[i]:=0; \\把刚才经过的1全部置0;

{已经产生一种2进制数}

{处理……}

End;

4.快排:

procedure qsort(l,r:longint);

var i,j,x,t:longint;

begin

i:=l;j:=r;

x:=a[(i+j) div 2]; \\取一个数;

repeat

while a[i]

while x

if i<=j then begin t:=a[i];a[i]:=a[j];a[j]:=t;inc(i);dec(j) end;

\\如果i与j不交叉,交换i与j位子的数,i与j各再跳一步;

until i>j; \\直至i与j交叉;x已经在交叉的位置了。

if l

if i

end;

5.二分查找法(数组a已经从小到大排序)

function find(x,l,r:integer):boolean; \\x要找的数,在l到r的位置中查找。var

mid:integer;

begin

if l>r then exit(false); \\l与r交叉,表示没有找到。

mid:=(l+r) div 2; \\取中间位置;

if x=a[mid] then exit(true); \\ X等于该位置的数找到了!

if x

if x>a[mid] then exit(find(x,mid+1,r)); \\X大于该位置的数,则在右边找(递归);end;

6.高精加:

i:=1;x:=0;

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

while (i<=la) or (i<=lb) do \\只要i小于a或b的长度就的循环;

begin

c[i]:=a[i]+b[i]+x; \\按i所指的那一位,相加(含前位进位x)给c数组;

x:=c[i] div 10; \\取该位置的进位给x;

c[i]:=c[i] mod 10; \\留下没有进位的部分;

i:=i+1; \\i加1

end;

c[i]:=x; 记得最高位的进位;

if x>0 then lc:=i else lc:=i-1; \\lc记录结果的长度;

7.高精减:

i:=1;

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

while i<=la do

begin

if a[i]

c[i]:=a[i]-b[i];

i:=i+1;

end;

lc:=i;

while (c[lc]=0) and (lc>1) do dec(lc);

8.高精乘:

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

for i:=1 to lb do

begin

x:=0;

for j:=1 to la do

begin

c[i+j-1]:=b[i]*a[j]+x+c[i+j-1];

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

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

相关文档
最新文档