基层组织建设部 网站,哪个网站的品牌特卖做的好,学代码的网站,深圳网站建设注意事项★模拟法有些问题的描述和解决方法已经很清楚#xff0c;只需要按照描述去一步一步的执行即可#xff0c;这种方法就是计算机解决问题的一种最普遍最直接的方法------模拟法。模拟法并不是程序#xff0c;只是我们依赖计算机的运算速度解决问题的一种方法或模式#xff0c;…★模拟法有些问题的描述和解决方法已经很清楚只需要按照描述去一步一步的执行即可这种方法就是计算机解决问题的一种最普遍最直接的方法------模拟法。模拟法并不是程序只是我们依赖计算机的运算速度解决问题的一种方法或模式针对具体问题要设计具体的程序。模拟法适用于问题求解清晰、运算规模较小的问题。如果问题求解的时空代价很大就要考虑是否有其它更好的解决方案。典型例题例题1、酗酒的狱警。某监狱里有个很长的走廊走廊中一个接一个地有n个房间。每个房间中锁着一个犯人。一天夜里狱警决定玩一个无聊的游戏。第一轮中他喝了一口威士忌然后打开每个房间。第2轮他喝了一口威士忌然后按2的倍数遍历每个房间。第3轮他又喝了一口威士忌遍历所有3的倍数的房间以此类推。在遍历中如果房间是锁着的则打开否则锁上。他这样重复n轮最后醉酒。这时有些囚犯看到自己的房间所被打开了他们立即逃跑。对于有n个房间的走廊最终会有多少个囚犯逃脱程序program yujing;var num,s,n,m,i,k,j:integer;a:array[0..200] of boolean;beginreadln(num);for i:1 to num dobeginreadln(n);fillchar(a,sizeof(a),true);for j:1 to n dofor k:1 to n doif k mod j0then a[k]:not a[k];s:0;for j:1 to n doif a[j]false then inc(s);writeln(the last is:,s);end;end.例2、分发糖果。一些学生围绕老是坐着每人手里都有偶数个糖。现在老师吹一声哨子所有同学同时将自己的一半糖果给他右边的同学如果某个同学手里的糖果个数是奇数则老师给他一个糖果重复这个过程直到所有同学手中的糖果数一致。写一个程序判断老师要吹多少下哨子每人手中的糖果数才能一致并给出结束后每人手里的糖果数。程序program fatang;const maxn100000;type arrarray[0..maxn] of longint;var a:arr;n,i,total,sum:longint;procedure check(a:arr;n:longint); {计算吹哨子次数和最终糖果数}var i,p,q,j,k:longint;function eq(a:arr;n:longint):boolean; {判断每人的糖果数是否相等}var i:longint;begini:1;while (iinc(i);if in then eq:true else eq:false;end;beginwhile not eq(a,n) do {如果每人糖果不等则继续分配}begininc(total); {吹哨子数增加一次}q:a[n];for i:1 to n do {重新分配}beginp:a[i];a[i]:q div 2a[i] div 2;q:p;if odd(a[i]) thenbegininc(a[i]);inc(sum); {如果是奇数老师再给一个并计数}end;end;end;writeln(total, ,sum div n);end;beginreadln(n); {读入学生人数}while n0 dobeginsum:0;total:0;for i:1 to n dobeginreadln(a[i]); {读入每人的糖果数}inc(sum,a[i]); {计算糖果总数}end;check(a,n); {计算吹哨子的次数和糖果数}readln(n);end;end.