每周回顾与作业(十三)集合+递推+高精度.doc

每周回顾与作业(十三)集合+递推+高精度.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
每周回顾与作业(十三)集合+递推+高精度.doc

每周回顾与作业(十三)集合+递推+高精度 1、集合类型的定义形式为:集合类型名=set of 基类型  如var n: set of char;  集合类型是一种使用简便,节省内存面又运算速度快的数据类型。 2、集合的运算 空集合:[] 集合并交差 并:用+表示,例如[1,3,4]+[1,2,4]=[1,2,3,4] 交:用*表示,例如[1,3,4]*[1,2,4]=[1,4] 差:用-表示,例如[1,3,4]*[1,2,4]=[3] 关系运算:集合可以进行,,=,等运算,规则是元素多的大于元素少的。 包含判断:IN,例如1 in [1,3,4]是True; 2 in [1,3,4]是False。 集合运算中元素的次序是不重要的。 集合运算相当快,在程序中常用集合表达式来描述复杂的测试。如   A)条件表达式: (ch=T) or (ch=t) or (ch=Y) or (ch=y) 可用集合表达式表示为:         ch in [T,t,Y,y]   B)if (ch=20) and (ch=50) then ...;         可写成: if ch in [20..50] then ...; 注意:集合类型变量不能进行算术运算,了不允许用读/写语句直接输入/输出集合。 所以集合的建立:A)要通过赋值语句实现;       B)或先初始化一个集合,然后通过并运算向集合中逐步加入各个元素. 集合元素是无序的,所以ord,pred和succ函数不能用于集合类型的变量。 ☆运用集合完成筛法找素数。program pset; const n=200; type abc=set of 2..n; var sieve,prime:abc; { sieve用来装2-n之间的整数,prime放筛出的素数 } next,j:integer; begin sieve:=[2..n]; prime:=[]; next:=2; repeat while not (next in sieve) do next:=succ(next);{next是整形,可以用后继函数,相当+1} prime:=prime+[next]; {第一次把2放到prime中} j:=next; while j=n do begin sieve:=sieve-[j]; j:=j+next; end;{从sieve中去掉所有next的倍数} until sieve=[]; j:=0; for next:=2 to n do if next in prime then begin write(next:5); j:=j+1 if j=10 then begin writeln; j:=0; end; end; end. ☆例一:过河卒 const maxn=20; maxm=20; dx:array[1..8] of integer=(2,1,-1,-2,-2,-1, 1, 2); dy:array[1..8] of integer=(1,2, 2, 1,-1,-2,-2,-1); var f:array[0..maxn,0..maxm] of int64; g:array[-2..maxn+2,-2..maxm+2] of boolean; n,m,x,y:integer; i,j:integer; begin readln(n,m,x,y); fillchar(f,sizeof(f),0); fillchar(g,sizeof(g),true); g[x,y]:=false; for i:=1 to 8 do g[x+dx[i],y+dy[i]]:=false if g[0,0] then f[0,0]:=1; for i:=1 to m do if g[0,i] then f[0,i]:=f[0,i-1]; for i:=1 to n do if g[i,0] then f[i,0]:=f[i-1,0]; for i:=1 to n do for j:=1 to m do if g[i,j] then f[i,j]:=f[i-1,j]+f[i,j-1]; writeln(f[n,m]); end. 例二:凸多边形的三角剖分 program p2_2(input,output); const max=21; var c:array[2..max] of longint; n,i,k:integer; total:longint; begin wri

文档评论(0)

gsgtshb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档