82111668版Pascal算法高级视频教程附带例题与答案.docx

上传人:b****5 文档编号:8730866 上传时间:2023-05-14 格式:DOCX 页数:18 大小:17.20KB
下载 相关 举报
82111668版Pascal算法高级视频教程附带例题与答案.docx_第1页
第1页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第2页
第2页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第3页
第3页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第4页
第4页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第5页
第5页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第6页
第6页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第7页
第7页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第8页
第8页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第9页
第9页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第10页
第10页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第11页
第11页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第12页
第12页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第13页
第13页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第14页
第14页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第15页
第15页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第16页
第16页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第17页
第17页 / 共18页
82111668版Pascal算法高级视频教程附带例题与答案.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

82111668版Pascal算法高级视频教程附带例题与答案.docx

《82111668版Pascal算法高级视频教程附带例题与答案.docx》由会员分享,可在线阅读,更多相关《82111668版Pascal算法高级视频教程附带例题与答案.docx(18页珍藏版)》请在冰点文库上搜索。

82111668版Pascal算法高级视频教程附带例题与答案.docx

82111668版Pascal算法高级视频教程附带例题与答案

82111668_2012版Pascal高级算法视频教程附带例题与答案

例:

2.1.1高精度加法

programex(input,output);

typearr=array[1..256]ofinteger;

varst1,st2,st3:

string;

sz1,sz2,sz3:

arr;

i:

integer;

proceduresum(st:

string;varsz:

arr);

vari,code:

integer;

begin

fori:

=1tolength(st)do

val(st[length(st)+1-i],sz[i],code);

end;

functionfac:

boolean;

varj:

integer;

begin

fac:

=true;

forj:

=256downtoi+1do

ifsz3[j]<>0then

begin

fac:

=false;

exit;

end;

end;

procedurestart;

begin

fori:

=1to256do

begin

sz1[i]:

=0;

sz2[i]:

=0;

sz3[i]:

=0;

end;

end;

begin

start;

readln(st1);

readln(st2);

sum(st1,sz1);

sum(st2,sz2);{字符串→数组}

st3:

='';

fori:

=1to255do

begin

sz3[i+1]:

=(sz3[i]+sz1[i]+sz2[i])div10;

sz3[i]:

=(sz3[i]+sz1[i]+sz2[i])mod10;

end;{加法}

fori:

=1to256do

begin

st3:

=chr(sz3[i]+48)+st3;

iffacthenbreak;

end;{数组→字符串}

writeln(st1,'+',st2,'=',st3);

readln;

end.

例2.1.2.1高精度减法_1

programex(input,output);

typearr=array[1..65536]ofinteger;

varst1,st2,st3:

ansistring;

sz1,sz2,sz3:

arr;

i:

integer;

proceduresum(st:

string;varsz:

arr);

vari,code:

integer;

begin

fori:

=1tolength(st)do

val(st[length(st)+1-i],sz[i],code);

end;

functionfac:

boolean;

varj:

integer;

begin

fac:

=true;

forj:

=256downtoi+1do

ifsz3[j]<>0then

begin

fac:

=false;

exit;

end;

end;

procedurestart;

begin

fori:

=1to256do

begin

sz1[i]:

=0;

sz2[i]:

=0;

sz3[i]:

=0;

end;

end;

begin

start;

readln(st1);

readln(st2);

sum(st1,sz1);

sum(st2,sz2);{字符串→数组}

st3:

='';

fori:

=1to255do

begin

sz3[i]:

=sz3[i]+sz1[i]-sz2[i];

ifsz3[i]<0then

begin

sz3[i]:

=sz3[i]+10;

sz3[i+1]:

=sz3[i+1]-1;

end;

end;{减法}

fori:

=1to256do

begin

st3:

=chr(sz3[i]+48)+st3;

iffacthenbreak;

end;{数组→字符串}

writeln(st1,'-',st2,'=',st3);

readln;

end.

例2.1.2.2高精度减法_2

programex(input,output);

typearr1=array[1..65536]ofshortint;

arr2=array[1..65536]ofchar;

varsz1,sz2,sz3:

arr1;

s1,s2:

arr2;

n,m,i:

longint;

begin

fori:

=1to65536dobeginsz1[i]:

=0;sz2[i]:

=0;sz3[i]:

=0;end;

n:

=0;

whilenot(eoln())do

begin

inc(n);

read(s1[n]);

end;

fori:

=1tondosz1[i]:

=integer(s1[n+1-i])-48;

readln();

m:

=0;

whilenot(eoln())do

begin

inc(m);

read(s2[m]);

end;

readln();

fori:

=1tomdosz2[i]:

=integer(s2[m+1-i])-48;

fori:

=1tondo

begin

sz3[i]:

=sz3[i]+sz1[i]-sz2[i];

ifsz3[i]<0then

begin

sz3[i]:

=sz3[i]+10;

sz3[i+1]:

=-1;

end;

end;

i:

=n;

while(i>0)and(sz3[i]=0)dodec(i);

ifi=0thenwriteln(0)

else

begin

fori:

=idownto1dowrite(sz3[i]);

writeln();

end;

readln;

end.

例2.3.1:

插入排序

programinsert_sort(input,output);

vari,j,n,k:

integer;a:

array[1..100]ofinteger;

begin

readln(n);

fori:

=1tondoread(a[i]);

readln;

fori:

=2tondo

begin

k:

=a[i];

j:

=i;

while(j>=2)and(a[j-1]>k)do

begin

a[j]:

=a[j-1];

dec(j);

end;

a[j]:

=k;

end;

fori:

=1tondowrite(a[i]);

writeln;

readln;

end.

例3.3.1:

先序遍历

procedurefirst(p:

point);

begin

ifp=nilthenexit;

writeln(p^.data);

first(p^.left);

first(p^.right);

end;

例3.3.2:

中序遍历

proceduremiddle(p:

point);

begin

ifp=nilthenexit;

middle(p^.left);

writeln(p^.data);

middle(p^.right);

end;

例3.3.3:

后序遍历

procedurelast(p:

point);

begin

ifp=nilthenexit;

last(p^.left);

last(p^.right);

writeln(p^.data);

end;

例3.3.4:

树的宽度搜索

programBFS(input,output);

typepoint=^node;

node=record

data:

integer;

left,right:

point;

end;

queue=object

constmaxn=1000;

data:

array[1..maxn]ofpoint;

front,rear:

integer;

functionempty():

boolean;

procedureadd(n:

point);

end;

functionqueue.empty():

boolean;

begin

exit(front=rear);

end;

procedurequeue.add(n:

point);

begin

inc(rear);

data[rear]:

=n;

end;

varhead,p:

point;q:

queue;

begin

{输入二叉树。

}

q[1]:

=head;

q.front:

=0;

repeat

inc(q.front);

ifq.data[q.front]^.left<>nilthenq.add(q[q.front]^.left);

ifq.data[q.front]^.right<>nilthenq.add(q[q.front]^.right);

writeln(q.data[q.front]^.data);

untilq.empty();

end.

例4.1.1:

求100以内所有素数

programex(input,output);

vari:

integer;

functionfac(n:

integer):

boolean;

vari:

integer;

begin

fori:

=2totrunc(sqrt(n))do

ifnmodI=0then

exit(false);

exit(true);

end;

begin

fori:

=2to100do

iffac(i)then

write(I,’’);

writeln();

readln();

end.

例4.2.1:

不定级数穷举代码段

a:

arrayofinteger;n:

integer;

fillchar(a,sizeof(a),1);

repeat

i:

=1;

whilea[i]=11do

begin

a[i]:

=1;

inc(a[i+1]);

inc(i);

end;

{执行的语句}

inc(a[1]);

untila[n+1]=2;

例4.3.1:

N皇后

programex(input,output);

varn,i:

integer;a:

array[1..100]ofinteger;

functionfac:

boolean;

vari,j:

integer;

begin

fori:

=1ton-1do

forj:

=i+1tondo

if(a[i]=a[j])or(abs(a[i]-a[j])=abs(i-j))then

begin

fac:

=false;

exit;

end;

fac:

=true;

end;

procedureprintf;

vari:

integer;j:

integer;

begin

fori:

=1tondo

begin

forj:

=1toa[i]-1do

write('');

write('*');

writeln();

end;

writeln();

end;

begin

readln(n);

fori:

=1ton+1doa[i]:

=1;

repeat

i:

=1;

whilea[i]=n+1do

begin

a[i]:

=1;

inc(a[i+1]);

inc(i);

end;

iffac()thenprintf;

inc(a[1]);

untila[n+1]=2;

readln;

end.

例4.4.1:

部分背包问题

program部分背包(input,output);

{定义区}

typenode=record

w:

integer;

v:

integer;

end;

arr=array[1..100]ofnode;

varsz:

arr;n,m:

integer;

{主程序}

begin

读入;

按v/w排序sz;

i:

=0;

whilem<>0do

begin

inc(i);

ifsz[i].w

begin

m:

=m-sz[i].v;

write(sz[i].w,'',sz[i].v);

end

else

begin

write(sz[i].w,'',m);

break;

end;

end;

readln;

end.

例5.2.1:

线性动规——砍价问题(步步高升

programStepByStep(input,output);

typearr=array[1..1000]oflongint;

varw,z,a,b,i:

integer;sz:

arr;

begin

assign(input,'1.in');

reset(input);

readln(w,z);

readln(a,b);

close(input);

fillchar(sz,sizeof(sz),0);

sz[w]:

=1;

fori:

=w-1downtozdo

sz[i]:

=sz[i+a]+sz[i+b];

assign(output,'1.out');

rewrite(output);

writeln(sz[z]);

close(output);

end.

例5.3.1:

区域动规——统计单词个数

programTotalOfWords(input,output);

vartotal,i:

integer;ch:

char;

begin

assign(input,'1.in');

reset(input);

total:

=0;

whilenot(eof)do

begin

read(ch);

ifchin['a'..'z','A'..'Z']then

begin

inc(total);

while(chin['a'..'z','A'..'Z'])do

read(ch);

end;

end;

close(input);

assign(output,'1.out');

rewrite(output);

writeln(total);

close(output);

end.

例5.4.1:

树形动规——数字三角形

programNumberTriangle_high(input,output);

varsz:

array[1..4,1..4]ofinteger=((1,0,0,0),(2,3,0,0),(4,5,6,0),(7,8,9,10));i,j:

integer;

functionmax(a,b:

integer):

integer;

begin

ifa>bthenmax:

=a

elsemax:

=b;

end;

begin

fori:

=3downto1do

forj:

=idownto1do

sz[i,j]:

=max(sz[i+1,j],sz[i+1,j+1])+sz[i,j];

writeln(sz[1,1]);

write('Theroot:

');

whilei<>4do

begin

write(sz[i,j]-max(sz[i+1,j],sz[i+1,j+1]),'-->');

ifsz[i+1,j]

inc(i);

end;

writeln(sz[i,j]);

end.

例5.5.1:

背包动规——0/1背包问题(完全背包问题)

programbag(input,output);

constmaxm=200;maxn=30;

varm,n,i,j,k:

integer;

w,c,x:

array[0..maxn]ofinteger;

f:

array[0..maxn,0..maxm]ofinteger;

begin

readln(m,n);

fori:

=1tondoreadln(w[i],c[i]);

fori:

=1tomdof[0,i]:

=0;

fori:

=1tondof[i,0]:

=0;

fori:

=1tondo

forj:

=1tomdo

ifj>=w[i]theniff[i-1,j-w[i]]+c[i]>f[i-1,j]thenf[i,j]:

=f[i-1,j-w[i]]+c[i]

elsef[i,j]:

=f[i-1,j]

elsef[i,j]:

=f[i-1,j];

k:

=m;

fori:

=ndownto1do

iff[i,k]>f[i-1,k]thenbeginx[i]:

=1;k:

=k-w[i];end

elsex[i]:

=0;

writeln(f[n,m]);

fori:

=1tondo

ifx[i]=1then

write(i,'');

readln();

fori:

=0tondo

begin

forj:

=0tomdo

write(f[i,j],'');

writeln();

end;

end.

例5.6.1.1:

斐波那契数列求第n项值.递归公式

functionfac(n:

integer):

integer;

begin

ifn<=1thenfac:

=1;

elsefac:

=fac(n-1)+fac(n-2);

end;

例5.6.1.2:

斐波那契数列求第n项值.递推公式

sz[0]:

=1;

sz[1]:

=1;

fori:

=2tondosz[i]:

=sz[i-1]+sz[i-2];

例5.7.1:

过河卒问题地推公式

fori:

=1to8do

forj:

=1to4do

ifsz[i,j]<>-1thensz[i,j]:

=sz[i-1,j]+sz[i,j-1]

elsesz[i,j]:

=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2