- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计题集(整理稿)
信息学奥赛,一条通向成功之门的幽径。
学校:
姓名:
班级:
枚举搜索
枚举指的是从可能的解的集合中一一枚举各元素,用题目给定的检验条件判断哪些是无用的,哪些是有用的,能使命题成立即为其解。
一般思路:a、对命题建立正确的数学模型,b、根据命题确定数学模型中各变量的范围(即可能解的范围),c、利用循环语句、条件语句逐步求解或证明。
1、枚举数字【题目】编程找出四位数abcd中满足下述关系的数: (ab+cd)(ab+cd)=abcd
【算法】搜索问题:1000—9999
关键是边枚举边分离高位、低位,后判断
var: I,m,n,k:integer;
begin
for I:=1000 to 9999 do
begin
m:=I div 100;
n:=I-m*100;
k:=(m+n)*(m+n);
if k:=I then writeln(I);
end;
end.
2、钞票换硬币【题目】把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法?
【答案】461种
【参考程序】
var i,j,k,total:integer;
begin
total:=0; {总数设为0}
for i:=1 to 99 do {i:二分硬币最多99枚}
for j:=1 to 49 do {j:二分硬币最多49枚}
for k:=1 to 19 do {k:五分硬币最多19枚}
if i*1+j*2+k*5=100 then begin
writeln(i:3,j:3,k:3);
inc(total); {总数加1}
end;
writeln(total);
readln;
end.
逻辑判断
【逻辑判断】根据条件利用取值函数ord对条件进行取值,然后利用循环语句穷举。
5、谁是小偷【题目】有A、B、C、D四名偷窃嫌疑犯,其中一人是小偷,审问中,A说:“我
不是小偷”,B说:“C是小偷”,C说:“小偷肯定是D”,D说:“C
在冤枉人”,有三人说真话,一人说假话,问到底谁是小偷?
【参考程序】
var thief:char;
begin
for thief:=A to D do
if ord(thiefA)+ord(thief=C)+ord(thief=D)+
ord(thiefD)=3 then writeln(The Thief is : ,thief);
end.
6、质量评比
【题目】5家工厂的产品在一次评比中分获1,2,3,4,5,在公布结果前,已知E
厂产品肯定不是第二、三名,五厂代表猜测评比结果,
A厂的代表说:E厂一定能获得第一名。
B厂的代表说:我厂的产品可能获第二名。
C厂的代表说:A厂的产品质量最次。
D厂的代表说:C厂的产品不是最好的。
E厂的代表说:D厂的产品会获得第一名。
公布结果后,证明只有产品获第一名和第二名的两个厂的代表猜对了。
求5个厂产品各获第几名。
【答案】 A B C D E
5 2 1 3 4
【参考程序】
var a,b,c,d,e:byte;
begin
for a:=1 to 5 do
for b:=1 to 5 do
for c:=1 to 5 do
for d:=1 to 5 do begin
e:=15-a-b-c-d;
文档评论(0)