HKOI初赛高级组下列程序段中所有未有列出宣告.docx
- 文档编号:6618276
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:26
- 大小:146.29KB
HKOI初赛高级组下列程序段中所有未有列出宣告.docx
《HKOI初赛高级组下列程序段中所有未有列出宣告.docx》由会员分享,可在线阅读,更多相关《HKOI初赛高级组下列程序段中所有未有列出宣告.docx(26页珍藏版)》请在冰豆网上搜索。
HKOI初赛高级组下列程序段中所有未有列出宣告
下列程序段中,所有未有列出宣告(declaration)的變量,均假設已經適當地宣告;而整數(integer/int)及長整數(longint/long)則分別為16位元及32位元有符號的整數。
假設所有程序都正確地編譯,且沒有使用任何編譯器選項(除C程序的"-o"選擇外)。
符號
對於任何實數x,
(1)
表示不大於x的最大整數;
(2)
表示不小於x的最小整數;
(3)
表示x的絕對值。
甲部
請為下列每題各選一個最適合的答案,然後把答案的字母(A、B、C、D)寫到答題紙對應的空格中。
1.甲、乙和丙正在玩一個名為「石頭、布、剪刀」的遊戲。
在每一回合,每一個遊戲者都需要選擇石頭、布或是剪刀。
石頭可以打敗剪刀。
剪刀可以打敗布。
布可以打敗石頭。
如果遊戲者甲所選的打敗遊戲者乙所選的,那麼遊戲者甲就打敗了遊戲者乙。
如果遊戲者甲和遊戲者乙所選的東西一樣,他們就當打和。
如果遊戲者乙打敗遊戲者甲,那麼遊戲者甲就敗給了遊戲者乙。
以下哪個/哪些敍述必定正確?
(i)若甲沒有打敗乙或與乙打和,則甲就是敗給乙。
(ii)若甲敗給乙,同時丙敗給甲,則丙就是打敗了乙。
(iii)當與一台隨機選擇石頭、布或剪刀的機器玩時,存在一種策略使得遊戲者勝出的機會大於落敗的機會。
A.只有(i)
B.只有(i)和(ii)
C.只有(ii)和(iii)
D.(i)、(ii)和(iii)
2.承上題,甲、乙、丙現在玩一個名為「石頭、布、剪刀、繩」的遊戲。
這個遊戲中,遊戲者多了一個選擇,名為「繩」。
繩打敗石頭和布,但敗給剪刀。
以下哪個/哪些敍述必定正確?
(i)若甲沒有打敗乙或與乙打和,則甲就是敗給乙。
(ii)若甲敗給乙,同時丙敗給甲,則丙就是打敗了乙。
(iii)當與一台隨機選擇石頭、布、剪刀或繩的機器玩時,存在一種策略使得遊戲者勝出的機會大於落敗的機會。
A.只有(iii)
B.只有(i)和(ii)
C.只有(i)和(iii)
D.(i)、(ii)和(iii)
3.承上題,遊戲再增加一個選擇,名為「刀」。
刀可以打敗剪刀和繩,但敗給布和石頭。
以下哪個/哪些敍述必定正確?
(i)若甲不是打敗乙或與乙玩和,則甲就是敗給乙。
(ii)若甲敗給乙,同時丙敗給甲,則丙就是打敗了乙。
(iii)當與一台隨機選擇石頭、布、剪刀、繩或刀的機器玩時,存在一種策略使得遊戲者勝出的機會大於落敗的機會。
A.只有(i)
B.只有(i)和(ii)
C.只有(ii)和(iii)
D.(i)、(ii)和(iii)
4.問以下程序的輸出為何?
Pascal版本
var
i,r :
integer;
z :
array[0..5]ofinteger;
procedureswap(a,b :
integer);
var
tmp :
integer;
begin
tmp :
=a;
a :
=b;
b :
=tmp;
end;
begin
z[0] :
=2;
z[1] :
=3;
z[2] :
=1;
z[3] :
=4;
z[4] :
=5;
fori:
=0to4do
forr :
=1to4do
ifz[r-1]>z[r]then
swap(z[r-1],z[r]);
fori:
=0to4do
write(z[i],'');
end.
C版本
#include
voidswap(inta,intb){
inttmp;
tmp=a;
a=b;
b=tmp;
}
intmain(){
intz[5],i,r;
z[0]=2;
z[1]=3;
z[2]=1;
z[3]=4;
z[4]=5;
for(i=0;i<5;++i)
for(r=1;r<5;++r)
if(z[r-1]>z[r])
swap(z[r-1],z[r]);
for(i=0;i<5;++i)
printf("%d",z[i]);
return0;
}
A.12345
B.43251
C.23145
D.54321
5.在棋盤上,如果兩隻后處於同一行、同一列或同一對角線上,則它們相互攻擊。
問下列哪個/哪些敍述必定正確?
(i)在N×N的棋盤上可以且最多可以放置N隻后,使得沒有任何兩隻后相互攻擊。
在N×(N+1)的棋盤上,可以且最多可以放置(N+1)隻后使得沒有任何兩隻后相互攻擊。
A.只有(i)
B.只有(ii)
C.(i)與(ii)
D.兩者皆否
6.細閱以下程序段:
Pascal版本
ifn begin t : =n; n : =m; m : =t; end; i : =1; while(n*imodm<>0)do i : =i+1;{*} writeln(n*i); C版本 if(n t=n; n=m; m=t; } i=1; while(n*i %m ! =0) i++;//* printf("%d\n",n*i); 以下哪個/哪些敍述是正確的? (i)標示為{*}(C版本為//*)的程序碼不會被執行當且僅當程序段運行前,n是m的倍數。 (ii)此程序段尋找m和n的最小公倍數。 (iii)i的最大值是m+1. A.只有(i) B.只有(ii) C.只有(i)和(ii) D.只有(ii)和(iii) 7.細閱以下函數﹕ Pascal版本 proceduref(n,m,num : integer); vari : integer; begin ifn<>0then fori : =0tom-1do f(n-1,m,num*10+i) else writeln(num); end; C版本 voidf(intn,intm,intnum){ inti; if(n ! =0) for(i=0;i<=m-1;++i) f(n-1,m,num*10+i); else printf("%d\n",num); } 假設n和m皆為正數,和上述函數不會引致溢位問題。 以下哪一/哪些關於呼叫f(n,m,0)的敍述為真? (i)上述函數在不引致運行錯誤下結束。 (ii)輸出有mn行。 (iii)每行輸出都是一個n位數字。 A.只有(iii) B.只有(i)和(ii) C.只有(i)和(iii) D.(i)、(ii)和(iii) 8.在一幅地圖上,有些城巿與城巿之間以雙向道路相連。 在任何旅程中,我們從任一城巿甲出發,探訪一些其他的城巿,再回到城巿甲。 除城巿甲外,每個城巿都只可以被探訪最多一次,而且我們不可以重複通過同一道路。 我們發現現有的地圖上,有最少一個旅程,而且所有旅程都剛好通過奇數數目的道路。 下列哪個敍述必定正確? A.我們無法將城巿分成兩組,使得任何以道路直接相連的城巿都屬於不同的組別 B.城巿的數目必為奇數。 C.城巿數目超過一的地圖沒可能符合條件 D.以上皆非 9.一條隊列可以有以下的運作﹕ 進隊﹕在隊尾插入一個元素 出隊﹕刪除在隊頭的元素 已知隊列中有n個元素。 你需要刪除現在在隊尾的元素但要保持其他元素的排列次序。 問你最少需要多少次運作去能達到目的。 A.1 B.2n-2 C.2n-1 D.2n 細閱以下資料,然後解答題10至11。 下列地圖中,圓形及線段分別代表城鎮和道路。 有一位商人打算以最少時間從城鎮甲走到城鎮乙。 假設走完一條道路需時一天。 10.問商人需要多少時間從城鎮甲走到城鎮乙? A.2天 B.3天 C.4天 D.5天 11.不幸地,地震發生了。 其中一個城鎮被破壞了。 另外尚有一條道路被破壞了,而其他的道路和城鎮都完好無缺。 商人無法通過被破壞的道路,或任何連接被破壞的城鎮的道路。 幸運地,我們知道城鎮甲和城鎮乙完好無缺,且連接城鎮甲或城鎮乙的道路均沒有被破壞。 假設商人知道哪條道路和哪個城鎮被破壞,問商人從城鎮甲走到城鎮乙最多需要多少天? A.3 B.4 C.5 D.無法確定 12.細閱以下程序段﹕ Pascal版本 forj : =0ton-1do begin fori : =0tom-2do y[i] : =x[i+1]; y[m-1] : =x[0]; end; a: =0; b: =0; fori: =0tom-1do ify[i]<>x[(i+n)modm]then a: =1; fori: =0tom-1do ify[i]=x[(m-n+i)modm]then b: =1; C版本 for(j=0;j for(i=0;i y[i]=x[i+1]; y[m-1]=x[0]; } a=0; b=0; for(i=0;i if(y[i]! =x[(i+n) %m]) a=1; for(i=0;i if(y[i]! =x[(m-n+i)%m]) b=1; 假設y[0..m-1](C版本為y[m])和x[0..m-1](C版本為x[m])為數列。 n和m 為正整數且n小於m。 在以上的程序段運行後,以下那個敍述是對的? A.a的值為0 B.b的值為0 C.y是由把x倒轉而得出的 D.y的每個元素均與x中同位置的元素相等 13.細閱下列程序段: Pascal版本 temp : =0; fori : =0to9do temp : =f(temp,A[i]); writeln(temp); C版本 temp=0; for(i=0;i<10;++i) temp=f(temp,A[i]); printf("%d\n",temp); 設A[0..9]是一個正整數數列,且各元素均少於1000。 以下那個是敍述是錯的? A.如果f(x,y)的傳回值是x+1,程序段的輸出就會是10 B.如果f(x,y)的傳回值是x和y的最大值,程序段的輸出就會是A數列中元素的最大值 C.如果f(x,y)的傳回值是x+y,程序段的輸出就會是A數列所有元素的總和 D.如果f(x,y)的傳回值是x*y,程序段的輸出就會是A數列所有元素的積 14.在假設溢位不會發生的情況下,以下哪個/哪些程序段可以將整數變量x和y的數值互換? Pascal版本 (i) x : =2*x+2*y; y : =2*y-x; x : =x-y; y : =ydiv2; x : =xdiv2; (ii) x : =xdiv2+ydiv2; y : =y-x; x : =x-y; x : =x*2; y : =y*2; C版本 (i) x=2*x+2*y; y=2*y-x; x=x-y; y=y/2; x=x/2; (ii) x=x/2+y/2; y=y-x; x=x-y; x=x*2; y=y*2; A.只有(i) B.只有(ii) C.(i)和(ii) D.以上皆非 15.細閱下列程序: Pascal版本 var i: longint; begin i : =2; whilei<>0do begin i : =i+2147483647;{*} end; end. C版本 #include intmain(){ longi; i=2; while(i ! =0) i=i+2147483647;//* return0; } 對於以上程序,以下哪個/哪些是正確的? (i)程序不會停止運行。 (ii)程序會有運行錯誤。 (iii)如果將用{*}(CVersion為//*)標示的那行改為"i: =i+2147483647;"(C版本為"i=i+2147483647+1;"),程序仍會正常地結束。 A.只有(i)和(ii) B.只有(ii)和(iii) C.(i)、(ii)和(iii) D.三者皆非 16.在一個3x3的棋盤上,假設一隻棋子可以任意跳到一個未到達過的格子,而每一跳所需的能量為目的地與起跳點的垂直距離加上水平距離。 假設可以在任何一格開始,問到達所有其他格子所需的能量最大值和最小值分別是? 最小值 最大值 A. 8 18 B. 8 24 C. 11 15 D. 11 16 17.現有17枝火柴砌成的一個2x3的板。 在只移除其中兩枝不在最外圍的火柴的條件下,有多少種方法使板變為只有四個不重疊的長方形? A.12 B.13 C.14 D.15 18.細閱以下程序﹕ Pascal版本 var X,Y : integer; begin readln(X,Y); writeln((X-Y)mod6); writeln(((Xmod6)-(Ymod6))mod6); end. C版本 #include intX,Y; intmain(){ scanf("%d%d",&X,&Y); printf("%d\n",(X-Y) %6); printf("%d\n",((X %6)-(Y %6)) %6); return0; } 以下那組X和Y的值會使以上程序輸出兩個不同的整數? X Y A. 1 1 B. 3 4 C. 8 10 D. 9 13 19.已知函數random()會回傳由0到99的整數,以及函數abs(x)會回傳x的絕對值。 問以下那一/那些句子會製造由0至9(包括0和9)的整數? (i)random()div100*10(C版本為random()/100*10) (ii)random()div2div5(C版本為random()/2/5) (iii)abs(random()-50)div5(C版本為abs(random()-50)/5) A.只有(ii) B.只有(iii) C.只有(i)和(ii) D.只有(ii)和(iii) 細閱以下程序,然後解答題20至21。 Pascal版本 var s : string; i,j : integer; begin s : ='110001'; j : =1; fori : =1to6do begin ifs[i]='0'then j : =(jshl1)or1; ifs[i]='1'then j : =jshr1; end; writeln(j); end. C版本 #include intmain(){ chars[]="110001"; inti,j; j=1; for(i=0;i<6;i++){ if(s[i]=='0') j=(j<<1)|1; if(s[i]=='1') j>>=1; } printf("%d\n",j); return0; } 20.問上述程序段的輸出為何? A.2 B.3 C.4 D.5 21.假設你能夠用其他字符串代替'110001'(C版本為"110001")下列哪一/哪些是可能給出的輸出? (i)7 (ii)9 (iii)16 (iv)31 A.只有(iii) B.只有(i)和(iii) C.只有(ii)和(iii) D.只有(ii)和(iv) 22.給出五個正整數,以下哪個/哪些敍述是正確? (i)我們可以選擇最少一個數字使得它們的和為5的倍數。 (ii)我們可以選擇其中兩個正整數使得它們的和為奇數。 A.只有(i) B.只有(ii) C.(i)和(ii) D.以上皆非 23.設有N個學生。 若學生A和學生B是朋友,我們說A和B之間有一段友誼。 每段友誼只包括剛好兩個學生。 若兩段友誼所包括的兩對學生並不相同,這兩段友誼並不相等。 定義「能夠連絡」為﹕ 1.若學生A和B是朋友,則A能夠連絡B,B亦能夠連絡A; 2.若學生A能夠連絡B,並且C是B的朋友,則A能夠連絡C,C亦能夠連絡A。 下列哪一/哪些敍述句正確? A.最多可能的友誼數目為N2。 B.若最少有N-1段友誼,則每個學生都可以連絡其他學生。 C.若學生C並不能夠連絡學生A,則對於任何A能夠連絡的學生,C都不能夠連絡他們。 D.若所有學生都可以連絡其他學生,則一定存在最少N段友誼。 24.下列程序段的目的為何? Pascal版本 k : =1; i : =2; while(i begin ifnmodi=mmodithen k : =i; i : =i+1; end; writeln(k); C版本 k=1; i=2; while(i if(n %i==m %i) k=i; i++; } printf("%d\n",k); A.尋找n+m的因數中少於min(n,m)的最大整數 B.尋找能同時整除m和n的最大整數 C.尋找|n-m|的最大因數 D.尋找少於min(n,m)並不整除m和n的最大整數 細閱以下資料,然後解答題25至26。 “Wordbot”是一種能夠跟據指令而行走的機器人。 指令是由小寫英文字母組成的字串。 Wordbot最初在上圖的圓形1並開始行走。 當Wordbot接收指令時,它會逐一處理指令中的每個字元。 對於每一個字元,它會嘗試尋找在其位置的圓形上,帶有字元並向外的箭號,並跟據此箭號行走。 若沒有此箭號,Wordbot便會退回圓形1。 若Wordbot到達圓形5,它便會發出「嗶」聲,並自行關機。 例如,若指令是「ray」,Wordbot便會從圓形1走到圓形2,然後再走到圓形3,最後回到圓形1。 25.Wordbot會發出「嗶」聲當且僅當 A.“r”、“a”和“e”都出現在指令中 B.“rare”一字出現在指令中 C.指令以“rare”為開首 D.“rarer”一字出現在指令中 26.如果由圓形4至圓形3帶有字元“a”的箭頭被移除,下列哪一/哪些敘述正確? (i)即使「rare」沒有在指令中出現,Wordbot亦可能發出「嗶」聲。 (ii)即使「rare」在指令中出現,Wordbot亦可能不會發出「嗶」。 A.只有(i) B.只有(ii) C.(i)和(ii) D.兩者皆否 27.問以下程序的輸出為何? Pascal版本 var i,j,k : integer; begin k : =0; fori : =1to2009do begin k : =k+imod2; k : =k+imod4; k : =k+imod6; end; writeln(k); end. C版本 #include intmain(){ inti,j,k; k=0; for(i=1;i<=2009;++i){ k=k+i %2; k=k+i %4; k=k+i %6; } printf("%d\n",k); return0; } A.2009 B.6027 C.9043 D.18086 28.在一個3列(row)、4行(column)的棋盤上,有多少方法可以放置6隻棋子,使得: (i)沒有三隻棋子處於同一列,及 (ii)沒有三隻棋子處於同一行? A.108 B.114 C.210 D.216 29.細閱以下程序﹕ Pascal版本 var g : integer; functionF(x,y: integer): integer; begin if(x=g)or(x=y)then F : =1 else begin f : =F(x-1,y-1)+F(x-1,y); end; end; begin g : =0;{*} writeln(F(4,3)); writeln(F(4,2)); end. C版本 #include intg; intF(intx,inty){ if(x==g||x==y) return1; else{ returnF(x-1,y-1)+F(x-1,y); } } intmain(){ g=0;//* printf("%d\n",F(4,3)); printf("%d\n",F(4,2)); return0; } 以下那個/那些敍述必定正確? (i)第一行的輸出為5。 (ii)所輸出的兩行是相等的。 (iii)如果標有{*}(C版本為//*)的那行改為g: =1;(C版本為g=1;),以上程序所輸出的兩行是相等的。 A.只有(i) B.只有(iii) C.只有(i)和(ii) D.只有(ii)和(iii) 30.細閱以下程序段﹕ Pascal版本 fori: =0to99do x[i]: =0; i : =0; j : =0; x[0] : =y[0]; whil
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HKOI 初赛 高级 下列 程序 所有 未有 列出 宣告