穷举法狐狸捉兔子猴子选大王.doc

上传人:cn****1 文档编号:548045988 上传时间:2023-02-06 格式:DOC 页数:4 大小:28.51KB
返回 下载 相关 举报
穷举法狐狸捉兔子猴子选大王.doc_第1页
第1页 / 共4页
穷举法狐狸捉兔子猴子选大王.doc_第2页
第2页 / 共4页
穷举法狐狸捉兔子猴子选大王.doc_第3页
第3页 / 共4页
穷举法狐狸捉兔子猴子选大王.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《穷举法狐狸捉兔子猴子选大王.doc》由会员分享,可在线阅读,更多相关《穷举法狐狸捉兔子猴子选大王.doc(4页珍藏版)》请在金锄头文库上搜索。

1、穷举法狐狸捉兔子猴子选大王 列举(枚举)法 枚举( enumerate)法是基于计算机运算速度快这一特性的一种使用非常普遍的思维方法。它是根据问题中的条件将可能的情况一一列举出来分析求解的方法。但有时一一列举出的情况数目很大,如果超过了我们所能忍受的范围则需要考虑如何去排除不合理的情况,尽可能减少列举的问题可能解的数目。 例:求一元三次方程的解。 有形如: ax3+bx2+cx+d=0一元三次方程。给出该方程中各项的系数 (a, b, c, d 均为实数 ),并约定该方程存在三个不同实根 (根的范围在 -100至 100之间 ),且根与根之差的绝对值 =1。要求由小到大依次在同一行上输出这三个

2、实根。 这道题的解法很多,最为简洁的方法就是直接枚举可能的实根解。 var a,b,c,d:real;i:integer; function f(x:real):real; begin f:=a*x*x*x+b*x*x+c*x+d end; begin readln(a,b,c,d); for i:=-10000 to 10000 do 枚举方程所有可能的解 if abs(f(i/100)1e-4 then write(i/100:2:2, ); end.猴子选大王题目:有M个猴子围成一圈,每个有一个编号,编号从1到M。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始,每隔N

3、个,数到的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M,N,编程计算哪一个编号的猴子成为大王。program tt;const n1=100;var a:array 1.n1 of integer;m,n,i,j,k:integer;beginwrite(input m,n:);readln(m,n);for i:=1 to m do ai:=i;i:=1; k:=0;while im dobeginj:=0;while jm thenbegink:=1;while ak=0 do k:=k+1;end;end;ak:=0;i:=i+1;end;i:=1;while ai=0 do i:

4、=i+1;writeln(The king is ,i);end.变形猴子选大王题目:有M个人围成一圈,每人有一个编号,从编号为1的人开始,每隔N个出圈,按出圈次序排成一列,其编号刚好按顺序从1到M。要求:从键盘输入M,N,编程计算并输出这M个人原来在圈中的位置。求数串的原始排列题目:前N个自然数排成一串: X1,X2,X3.Xn,先取出x1,将x2,x3移到数串尾,再取出x4,将x4,x6移到数串尾,. 类推直至取完取出的序列恰好是:1,2,3.n要求输入N,求原来的数串的排列方式.var a:array1.1000 of word;n,i,j,dep:word;beginwrite(N(1

5、-1000)=);readln(n);if (n=0) or (n1000) then beginwriteln(Input error.); readln; halt; end;fillchar(a,sizeof(a),0); a1:=1; dep:=1;for i:=2 to n do beginj:=3; while (j0) do begindep:=dep mod n+1;if adep=0 then dec(j);end;adep:=i;end;for i:=1 to n do write(ai:5);writeln; readln;end.狐狸捉兔子问题:围绕着山顶有个洞,狐狸要

6、吃兔子,兔子说:“可以,但必须找到我,?我就藏身于这十个洞中,你从号洞出发,先到号洞找,第二次隔个洞找,第三次隔个洞找,以后如此类推,次数不限。”但狐狸从早到晚进进出出了次,仍没有找到兔子。问兔子究竟藏在哪个洞里?【答案】,【参考程序】 const holenumber=10; var hole:array0.holenumber of 0.1; step,i,number:longint; begin for i:=0 to 9 do holei:=0; number:=0; for step:=1 to 1000 do begin number:=number+step; 循环地数 i:=

7、number mod holenumber; 第几个洞 holei:=1; end; for i:=0 to holenumber-1 do if holei=0 then write(i:3); readln; end.【参考程序】 const m=10; 洞数 var l,f,t:integer; a:array1.m+1 of 0.1; begin for t:=1 to m do at:=0; f:=0; t:=0; l:=0; repeat l:=l+1; 隔几个洞 t:=t+l; 第几个洞 if tm+1 then t:=t mod m; if t=0 then t:=10;循环地找 at:=1;该洞已进过 f:=f+1; 进洞的次数 until f=1000; for t:=1 to 10 do if at=0 then write(t, ); readln end.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号