自学版完善程序Word格式.docx
- 文档编号:16346385
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:30
- 大小:29.25KB
自学版完善程序Word格式.docx
《自学版完善程序Word格式.docx》由会员分享,可在线阅读,更多相关《自学版完善程序Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
=trunc(m/10);
while(a[v]<
=w)or(3)do
ifa[v]=wthens:
=s+1;
ifa[v]=mthens:
ifa[v]=nthens:
(4);
if(5)thenwriteln(k);
end.结束
28.金蝉素数
(1)j<
=trunc(sqrt(k))
(2)L-1(3)a[v]<
=m(4)inc(v)(5)s=2*L-1
29、多项式乘法运算
【问题描述】
多项式乘法运算:
p(x)=2x2-x+1,q(x)=x+1
p(x)*q(x)=(2x2-x+1)(x+1)=2x3+x2+1
【程序说明】
多项式的表示:
系数、指数
如上例:
p(x)系数指数q(x)系数指数
2211
-1110
1000
00
p*q的结果存入c中。
其输出格式是:
依次用一对括号内的(系数、指数)分别来表示。
如上例的输出结果表示为:
(2,3)(1,2)(1,0)
jp:
readln(x,y);
whilex<
0do
jp:
=jp+l;
p[jp,1]:
=x;
p[jp,2]:
=y;
readln(x,y);
jq:
whilex<
0do
jq:
=jq+1;
q[jq,1]:
q[jq,2]:
jc:
c[jc,1]:
c[jc,2]:
=-1000;
fori:
=1tojpdo
___
(1)___
y:
=p[i,2];
forj:
=1tojqdo
___
(2)___
y1:
=y+q[j,2];
k:
whiley1<
c[k,2]dok:
=k+1;
ify1=c[k,2]then___(3)___
else
begin
forL:
=jcdowntokdo
c[L+1,1]:
=c[L,1];
c[L+1,2]:
=c[L,2];
end;
c[k,1]:
=x1;
c[k,2]:
=y1;
___(4)___
end;
=1tojcdo
if___(5)___then
write('
('
c[i,1],'
'
c[i,2],'
)'
);
end.
(1)x:
=p[i,1]
(2)x1:
=x*q[j,1](3)c[k,1]:
=c[k,1]+x1(4)inc(jc)(5)c[i,1]<
30、求最长不下降序列
设有由n个不相同的整数组成的数列,记为:
a
(1)、a
(2)、……、a(n)且a(i)<
a(j)(i<
j),例如3,18,7,14,10,12,23,41,16,24。
若存在i1<
i2<
i3<
…<
ie且有a(i1)<
a(i2)<
a(ie)则称为长度为e的不下降序列。
如上例中3,18,23,24就是一个长度为4的不下降序列,同时也有3,7,10,12,16,24长度为6的不下降序列。
程序要求,当原数列给出之后,求出最长的不下降序列。
【算法分析】
根据动态规划的原理,由后往前进行搜索。
1·
对a(n)来说,由于它是最后一个数,所以当从a(n)开始查找时,只存在长度为1的不下降序列;
2·
若从a(n-1)开始查找,则存在下面的两种可能性:
①若a(n-1)<
a(n)则存在长度为2的不下降序列a(n-1),a(n)。
②若a(n-1)>
a(n)则存在长度为1的不下降序列a(n-1)或a(n)。
3·
一般若从a(i)开始,此时最长不下降序列应该按下列方法求出:
在a(i+1),a(i+2),…,a(n)中,找出一个比a(i)大的且最长的不下降序列,作为它的后继。
4·
为算法上的需要,定义一个数组
整数类型二维数组d(N,3)
d(I,1)表示点a(i)
d(I,2)表示从I位置到达N的最长不下降序列长度
d(I,3)表示从I位置开始最长不下降序列的下一个位置
constmaxn=100;
typetlist=array[1..maxn,1..3]ofinteger;
vard:
tlist;
byte;
procedureinit;
vari:
readln(n);
=1tondo
beginread(d[i,1]);
d[i,2]:
d[i,3]:
end;
proceduremake;
vari,j,p,L:
longint;
=____
(2)___do
p:
=i+1tondo
if(d[i,1]<
d[j,1])and(d[j,2]>
L)then
beginL:
=d[j,2];
___(3)___;
if___(4)___then
begind[i,2]:
=L+1;
=p;
end
procedureoutput;
vari,L,dmax:
write('
;
SOURCE:
'
);
=1tondowrite(d[i,1]:
5);
writeln;
dmax:
=d[1,2];
L:
=2ton-1do
ifd[i,2]>
dmaxthen
begin___(5)___;
=i;
RESULTIS:
'
whileL<
beginwrite(d[L,1]:
=d[L,3]);
writeln('
MAXLENGTH='
d[dmax,2]);
init;
make;
output;
(2)n-1downto1(3)p:
=j(4)L>
0(5)dmax:
=d[i,2]
1.单源点最短路径:
给定带权有向图G=(v,e),源点v1在v中,求 v1到v中其余各结点的最短路径。
数据结构说明:
cost[I,j]:
表示带权有向图的邻接矩阵
d[j]:
表示从v1到vj的最短路径长度
path[j]:
表示从v1到vj的最短路径
程序如下:
programt5;
constn=5;
maxnum=1e10;
type
gr=array[1..n,1..n]ofreal;
dt=array[1..n]ofreal;
jh=setof1..n;
pt=array[1..n]ofjh;
var
s:
jh;
cost:
gr;
d:
dt;
path:
pt;
i,j,k:
mm:
real;
=1tondoread(cost[i,j]);
=[1];
=2tondo
d[i]:
=cost[1,i];
ifd[i]<
maxnumthenpath[i]:
=[1]+[i]
else___
(1)___
=1ton-1do
=maxnum;
if___
(2)___then
beginmm:
=d[j];
k:
=j;
=s+[k];
ifnot(jins)and(cost[k,j]<
maxnum)then
if___(3)___then
d[j]:
=d[k]+cost[k,j];
path[j]:
=___(4)___
v1->
v'
i,'
:
d[i]);
v1'
ifjinpath[i]thenwrite('
->
j);
2(好题!
).问题描述:
将n个整数分成k组(k≤n,要求每组不能为空),显然这k个部分均可得到一个各自的积
p1,p2,……pk,定义整数S为:
S=(p1-p2)^2+(p1-p3)^2+……+(p1-pk)^2+(p2-p3)^2+……+(pk-1-pk)^2
问题求解:
求出一种分法,使S为最大(若有多种方案仅记一种〉
程序说明:
数组:
a[1],a[2],...A[N]存放原数
p[1],p[2],...,p[K]存放每个部分的积
b[1],b[2],...,b[N]穷举用临时空间
d[1],d[2],...,d[N]存放最佳方案
程序:
programt6;
Vari,j,n,k:
integer;
sum,cmax:
a:
array[1..100]ofinteger;
b,d:
array[0..100]ofinteger;
p:
array[1..30]ofinteger;
readln(n,k);
=1tondoread(a[i]);
=0tondob[i]:
cmax:
while(b[0]=1)do
=1tokdo___(5)___;
___(6)___;
sum:
=1tok-1do
=___(7)___do
=sum+(p[i]-p[j])*(p[i]-p[j]);
if___(8)___then
=sum;
=1tondod[i]:
=b[i];
=n;
while___(9)___doj:
=j-1;
b[j]:
=b[j]+1;
forI:
=j+1tondo___(10)___;
writeln(cmax);
=1tondowrite(d[i]:
40);
1.
(1)path[i]:
=[i]
(2)not(jins)and(d[j]<
mm)
(3)(d[k]+cost[k,j])<
d[j](4)path[j]+[k]
2.(5)p[i]:
=1(6)p[b[i]]:
=p[b[i]]*a[i](7)i+1tok
(8)cmax<
sum(9)b[j]=k(10)b[i]:
=1
1.降序组合.给定两个自然数n,r(n>
r),输出从数1到n中按降序顺序取r个自然数的所有
组合.例如,n=5,r=3时,有如下组合:
543
542
541
532
531
521
432
431
421
321
programtk1;
varn,r,i,j:
a:
array[1..20]ofinteger;
n,r='
repeat
readln(n,r);
untiln>
r;
i:
a[1]:
writeln('
result:
ifi<
rthen
ifa[i]>
r-ithen
___
(1)___;
i:
=i+1;
elsebegin
___
(2)___;
a[I]:
=a[I]-1;
else
=1tordowrite(a[j]:
3);
ifa[r]=1then
=i-1;
a[i]:
=a[i]-1;
endelse___(3)___
untila[1]=r-1;
2.现在政府计划在某个区域内的的城市间架设高速公路,以使任意两个城市间能够直接或
间接到达,怎样修路,费用最小。
输入文件:
第一行一个整数n(n<
=100)表示城市数目。
第二行至第n+1行每行两个数xi,yi(0<
=xi,yi<
=100)表示第i个城市的坐标(单位:
千米);
输出最小费用(每千米一个单位价格)。
typetcity=record
x,y:
real
varc:
array[1..maxn]oftcity;
d:
array[1..maxn,1..maxn]ofreal;
p:
array[1..maxn]ofinteger;
n,i,j,k:
a,min:
=1tondoreadln(c[i].x,c[i].y);
d[i,j]:
=sqrt(sqr(c[i].x-c[j].x)+sqr(c[i].y-c[j].y));
p[1]:
=2tondo___(4)___
min:
=1e10;
if___(5)___then
=d[p[j],j];
___(6)___
a:
=a+d[p[k],k];
p[k]:
if___(7)___thenp[j]:
writeln(a:
0:
2);
1.a[i+1]:
=a[i]-12.i:
3.a[i]:
=a[i]-1或a[r]:
=a[r]-1;
4.p[i]:
5.(p[j]>
0)and(d[p[j],j])<
min)
6.k:
7.(p[j]>
0)and(d[p[j],j]>
d[k,j])
1、背包问题:
设有不同价值、不同重量的物品n件,求从这n件物品中选取部分物品的方案,使选中物品的总重量不超过指定的限制重量,但选中物品的价值之和最大。
[算法说明]:
设n件物品的重量分别为w1,w2,…,wn;
,物品的价值分别为v1,v2,…,vn。
采用递归寻找物品的选择方案。
设前面已有了多种选择的方案,并保留了其中总价值最大的方案于数组result中,该方案的总价值存于变量maxv。
当前正在考察某一新的方案,其物品选择情况保存于数组option中。
假定当前方案已考虑了前i-1件物品,现在要考虑第i件物品;
当前方案已包含的物品的重量之和为tw;
至此,若其余物品都选择是可能的话,本方案能达到的总价值的期望值设为tv。
算法引入tv是当一旦当前方案的总价值的期望值也小于前面方案的总价值maxv时,继续考察当前方案变成无意义的工作,应终止当前方案,立即去考察下一个方案。
因为当方案的总价值不比maxv大时,该方案不会再被考察。
这同时保证后面找到的方案一定会比前面的方案更好。
[程序清单]:
programex4;
constmaxn=20;
vari,n,limitw,maxv,totalv:
w,v:
array[1..maxn]oflongint;
result,option:
array[1..maxn]ofboolean;
proceduretry(i,tw,tv:
longint);
vark:
begin
iftw+w[i]<
=limitwthen
begin
option[i]:
=true;
nthen________________
(1)__________
=1tondoresult[k]:
=option[k];
maxv:
=tv
____________
(2)_____________;
iftv-v[i]>
maxvthen
nthen___________(3)____________
=tv-v[i]
输入物品种数n:
输入各物品的重量和价值:
totalv:
=1tondo
Inputw['
],v['
]:
readln(w[i],v[i]);
___________(4)_____________;
输入限制重量limitw:
readln(limitw);
=1tondooption[i]:
=false;
try(1,0,totalv);
选择方案为:
=1tondoif____________(5)__________thenwrite(i,'
总价值为:
maxv)
2、一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
如:
阵列
023*******
1034560500
2045600671
0000000089
有4个细胞。
1.从文件中读入m*n矩阵阵列,将其转换为boolean矩阵存入bz数组中;
2.沿bz数组矩阵从上到下,从左到右,找到遇到的第一个细胞;
3.将细胞的位置入队h,并沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置bz数组置为FLASE;
4.将h队的队头出队,沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置bz数组置为FLASE;
5.重复4,直至h队空为止,则此时找出了一个细胞;
6.重复2,直至矩阵找不到细胞;
7.输出找到的细胞数。
programxibao;
constdx:
array[1..4]of-1..1=(-1,0,1,0);
dy:
array[1..4]of-1..1=(0,1,0,-1);
varint:
text;
name,s:
string;
pic:
array[1..50,1..79]ofbyte;
bz:
array[1..50,1..79]ofboolean;
m,n,i,j,num:
h:
array[1..4000,1..2]ofbyte;
proceduredoing(p,q:
integer);
vari,t,w,x,y:
inc(num);
_____________
(1)________________;
w:
h[1,1]:
=_________
(2)________;
h[1,2]:
=_________(3)________;
repeat
fori:
=1to4do
begin
x:
=h[t,1]+dx[i];
y:
=h[t,2]+dy[i];
if(x>
0)and(x<
=m)and(y>
0)and(y<
=n)andbz[x,y]
thenbegininc(w);
h[w,1]:
h[w,2]:
bz[x,y]:
end;
inc(t);
until________________(4)______________;
fillchar(bz,sizeof(bz),true);
num:
write('
inputfile:
readln(name);
assign(int,name);
reset(int);
readln(int,m,n);
fori:
=1to
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自学 完善 程序