日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

clear nTotal nNum=1计算机考试,信息学奥赛常考算法——模拟法

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 clear nTotal nNum=1计算机考试,信息学奥赛常考算法——模拟法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

★模擬法

有些問題的描述和解決方法已經很清楚,只需要按照描述去一步一步的執行即可,這種方法就是計算機解決問題的一種最普遍最直接的方法------模擬法。

模擬法并不是程序,只是我們依賴計算機的運算速度解決問題的一種方法或模式,針對具體問題要設計具體的程序。

模擬法適用于問題求解清晰、運算規模較小的問題。如果問題求解的時空代價很大,就要考慮是否有其它更好的解決方案。

典型例題:

例題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;

begin

readln(num);

for i:=1 to num do

begin

readln(n);

fillchar(a,sizeof(a),true);

for j:=1 to n do

for k:=1 to n do

if k mod j=0

then a[k]:=not a[k];

s:=0;

for j:=1 to n do

if a[j]=false then inc(s);

writeln('the last is:',s);

end;

end.

例2、分發糖果。一些學生圍繞老是坐著,每人手里都有偶數個糖?,F在老師吹一聲哨子,所有同學同時將自己的一半糖果給他右邊的同學,如果某個同學手里的糖果個數是奇數,則老師給他一個糖果,重復這個過程直到所有同學手中的糖果數一致。

寫一個程序判斷老師要吹多少下哨子,每人手中的糖果數才能一致,并給出結束后每人手里的糖果數。

程序:

program fatang;

const maxn=100000;

type arr=array[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;

begin

i:=1;

while (iinc(i);

if i=n then eq:=true else eq:=false;

end;

begin

while not eq(a,n) do? {如果每人糖果不等,則繼續分配}

begin

inc(total);??? {吹哨子數增加一次}

q:=a[n];

for i:=1 to n do?? {重新分配}

begin

p:=a[i];

a[i]:=q div 2+a[i] div 2;

q:=p;

if odd(a[i]) then

begin

inc(a[i]);

inc(sum);??? {如果是奇數,老師再給一個,并計數}

end;

end;

end;

writeln(total,' ',sum div n);

end;

begin

readln(n);? {讀入學生人數}

while n>0 do

begin

sum:=0;

total:=0;

for i:=1 to n do

begin

readln(a[i]);? {讀入每人的糖果數}

inc(sum,a[i]);? {計算糖果總數}

end;

check(a,n);? {計算吹哨子的次數和糖果數}

readln(n);

end;

end.

總結

以上是生活随笔為你收集整理的clear nTotal nNum=1计算机考试,信息学奥赛常考算法——模拟法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。