2006NOIP初赛.doc_第1页
2006NOIP初赛.doc_第2页
2006NOIP初赛.doc_第3页
2006NOIP初赛.doc_第4页
2006NOIP初赛.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3. Program ex403; Const NN=7; Type Arr1=array0.30 of char; var s:arr1; k,p:integer; function fun1(s:arr1; a:char;n:integer):integer; var j:integer; begin j:=n; while (a0) do dec(j); dec(j)j:=j-1fun1:=j; end; Function fun2(s:arr1; a:char; n:integer):integer; var j:integer; begin j:=1; while (asj)and(j0) then begin n2:=n mod 10; write(n2:2); if(m1) then digit(n div 10,m div 10); n2:=n mod 10; write(n2:2); end; end; begin writeln(Input a number:); readln(x); x2:=1; while(x2x) do x2:=x2*10; x2:=x2 div 10; digit(x,x2); writeln; end. 输入:9734526 输出:_ 五完善程序 (前5空,每空2分,后6空,每空3分,共28分) 1(选排列)下面程序的功能是利用递归方法生成从1到n(n10)的n个数中取k(1=k=n)个数的全部可能的排列(不一定按升序输出)。例如,当n=3,k=2时,应该输出(每行输出5个排列): 12 13 21 23 32 31 程序: Program ex501; Var i,n,k:integer; a:array1.10 of integer; count:longint; Procedure perm2(j:integer); var i,p,t:integer; begin if then begin for i:=k to n do begin inc(count); t:=ak; ak:=ai; ai:=t; for do write(ap:1); write( ); t:=ak;ak:=ai;ai:=t; if (count mod 5=0) then writeln; end; exit; end; for i:=j to n do begin t:=aj;aj:=ai;ai:=t; ; t:=aj; ; end end; begin writeln(Entry n,k (k4-2-1-5-3。遗传算法的核心是通过两个个体的交叉操作,产生两个新的个体。下面的程序给出了最简单的一种交叉算法。具体过程如下: (1)选定中间一段作为互换段,该段的起止下标为t1,t2,随机生成t1,t2后,互换两段。(2)互换后,在每个新的排列中可能有重复数字,因而不能作为新个体的编码,一般再做两步处理:(2.1) 将两个互换段中,共同的数字标记为0,表示已处理完。(2.2) 将两个互换段中其余数字标记为1,按顺序将互换段外重复的数字进行替换。例如:n=12,两个个体分别是: a1: 1 3 5 4 * 2 6 7 9 * 10 12 8 11 a2: 3 2 1 12 * 6 7 10 11 * 8 5 4 9 t1=5,t2=8。上述每一行中,两个星号间的部分为互换段。假定数组的下标从1开始,互换后有: a1: 1 3 5 4 * 6 7 10 11 * 10 12 8 11 a2: 3 2 1 12 * 2 6 7 9 * 8 5 4 9 然后,将数字6,7对应的项标记为0,星号内数字2,9,10,11对应的项标记为1,并且按顺序对应关系为: 102 ,119。于是,将a19=10替换为a19=2,将a22=2替换为a22=10,类似再做第2组替换。这样处理后,就得到了两个新个体: a1: 1 3 5 4 6 7 10 11 2 12 8 9 a2: 3 10 1 12 2 6 7 9 8 5 4 11 (3)输出两个新个体的编码。程序: program ex502; type arr1=array1.20 of integer; var a1,a2,kz1,kz2:arr1; n,k,t1,t2:integer; function rand1(k:integer):integer; var t:integer; begin t:=0; while (tk) do t:=random(k+1)-2; rand1:=t; end; procedure read1(var a:arr1;m:integer); 读入数组元素a1至am,a0=0,略。 procedure wrt1(var a:arr1;m:integer); 输出数组元素a1至am,略。 procedure cross(var a1,a2:arr1;t1, t2,n:integer); var i,j,t,kj:integer; begin for i:=t1 to t2 do begin t:=a1i; ; end; for i:=1 to n do if (it2) then begin kz1i:=-1;kz2i:=-1; end else begin ; end; for i:=t1 to t2 do for j:=t1 to t2 do if(a1i=a2j) then begin ; break; end; for i:=t1 to t2 do if(kz1i=1) then begin for j:=t1 to t2 do if(kz2j=1) then begin kj:=j; break; end; for j:=1 to n do if then begin a1j:=a2kj;break; end; for j:=1 to n do if then begin a2j:=a1i; break; end; kz1i:=0;kz2kj:=0; end; end; begin writeln(input (n5):); readln(n); writeln(input array 1:); read1(a1,n); writeln(input array 2:); read1(a2,n); t1:=rand1(n-1); repeat t2:=rand1(n-1); until(t1t2); if(t1t2) then begin k:=t1; t1:=t2; t2:=k; end; ; wrt1(a1,n); wrt1(a2,n); end. Answer:3. 11 4. 6 2 5 4 3 7 9 9 7 3 4 5 2 6(数字之间无空格扣 2 分)五、完善程序(前 5 空,每空 2 分,后 6 空,每空 3 分)1 j=k (或k=j)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论