《基础算法(模拟法).ppt》由会员分享,可在线阅读,更多相关《基础算法(模拟法).ppt(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、模拟法所谓模拟法,是指用计算机的某些操作,模拟现实世界中的事物的变化,从而完成相应任务的方法。实际上,我们拿到题目后,一般会先根据题意,用纸和笔,针对样例数据,模拟计算一遍,清理各数据之间的内在逻辑联系,从而全面正确地理解题意,为建立数学模型、设计算法奠定基础。例1:津津的储蓄计划(save.pas)津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计
2、到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津
3、津平常存的钱加上20还给津津之后,津津手中会有多少钱。输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。输出文件save.out包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。【样例输入】注:版面关系,用/表示换行290/230/280/200/300/170/340/50/90/80/200/60【样例输出】-7【样例输入】290/230/280/200/300/170/330/50/90/80/200/60【样例输出】15
4、80例2:进制转换:将十进制数n(1=n=2147473647)转化为二进制数,我们通常使用短除法,即除2取余,结果倒排。编程实现输入整数n,输出其二进制。program li2;var n:longint;a:array1.31 of integer;i,j:integer;begin readln(n);i:=1;ai:=n mod 2;n:=n div 2;while(n0)do begin i:=i+1;ai:=n mod 2;n:=n div 2;end;for j:=i downto 1 do write(aj);end.例例3:约瑟夫问题:约瑟夫问题:M个人围成个人围成1圈,第一
5、个人从圈,第一个人从1开始报数,数到开始报数,数到N的人出圈,再从的人出圈,再从下一个人从下一个人从1开始报数,数到开始报数,数到N的人出圈,重复直到剩下最后的人出圈,重复直到剩下最后1人游戏结束,输出依人游戏结束,输出依次出圈人的编号及最后剩余人的编号。约定次出圈人的编号及最后剩余人的编号。约定M10000,N10000,且,且nm。program li3;var a:array1.10000 of integer;i,j,k:integer;m,n:integer;begin readln(m,n);for i:=1 to m-1 do ai:=i+1;am:=1;k:=m;for i:=1 to m-1 do begin for j:=1 to n-1 do k:=ak;write(ak:4);ak:=aak;end;writeln;writeln(ak);end.