- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)