電子學會青少年軟件編程(C語言五級)等級考試真題試卷(2022年3月)-附答案_第1頁
電子學會青少年軟件編程(C語言五級)等級考試真題試卷(2022年3月)-附答案_第2頁
電子學會青少年軟件編程(C語言五級)等級考試真題試卷(2022年3月)-附答案_第3頁
電子學會青少年軟件編程(C語言五級)等級考試真題試卷(2022年3月)-附答案_第4頁
電子學會青少年軟件編程(C語言五級)等級考試真題試卷(2022年3月)-附答案_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

青少年軟件編程(C語言五級)等級考試真題試卷(2022年3月)

題目總數(shù):4

總分數(shù):100

時間:不限時

第1題

數(shù)字變換

問答題

給定一個包含5個數(shù)字(0-9)的字符串,例如"02943",請將"12345"變換到它。你可以采取3種操作進行

變換

1.交換相鄰的兩個數(shù)字

2.將一個數(shù)字加1。如果加1后大于9,則變?yōu)?

3.將一個數(shù)字加倍。如果加倍后大于9,則將其變?yōu)榧颖逗蟮慕Y(jié)果除以10的余數(shù)。

最多只能用第2種操作3次,第3種操作2次求最少經(jīng)過多少次操作可以完成變換。

時間限制:1000

內(nèi)存限制:65536

輸入

有最多100,000組數(shù)據(jù)每組數(shù)據(jù)就是包含5個數(shù)字的字符串

輸出

對每組數(shù)據(jù),輸出將"12345"變換到給定字符串所需要的最少操作步數(shù)。如果無法變換成功,輸出-1

樣例輸入

12435

99999

12374

樣例輸出

1

-1

3

提示

由于測試數(shù)據(jù)太多,如果對每組數(shù)據(jù)都從頭進行搜索,就會超時。建議先做預處理,即以"12345"作為初始

狀態(tài)做一遍徹底的廣搜,找出"12345"經(jīng)合法變換能夠到達的所有字符串,并記錄到達這些字符串各需要多

少步操作。然后對讀入的每組數(shù)據(jù),在上述預處理記錄的結(jié)果中進行查詢即可。

答案

參考答案1

#include<iostream>

#include<algorithm>

#include<cstring>

#include<queue>

usingnamespacestd;

#define_init(x,v)memset(x,v,sizeof(x))

intrcd[100000];

boolvis[100000][5][5];

structnode{

inta[5],d,o2,o3;

};

queue<node>q;

voidin(){

_init(rcd,-1);

nodes={1,2,3,4,5,0,3,2};

q.push(s);

vis[12345][3][2]=1;

rcd[12345]=0;

}

inttoNum(node&n){

intt=0;

for(inti=0;i<5;++i){

t*=10;

t+=n.a[i];

}

returnt;

}

voidbfs(){

while(!q.empty()){

nodes=q.front();

intt=toNum(s);

if(rcd[t]==-1||rcd[t]>s.d)rcd[t]=s.d;

//printf("n=%d,d=%d,o2=%d,o3=%d\n",toNum(s),s.d,s.o2,s.o3);

++s.d;

q.pop();

for(inti=0;i<5;++i){

//o1

if(i<4&&s.a[i]!=s.a[i+1]){

swap(s.a[i],s.a[i+1]);

if(!vis[toNum(s)][s.o2][s.o3]){

vis[toNum(s)][s.o2][s.o3]=1;

q.push(s);

第2題

尋找邊緣

問答題

給定一張R*C的地圖,由"X"和"O"組成。

現(xiàn)在需要重新處理這張地圖,找到地圖邊緣的那些"O"。你需要將這些地圖邊緣上的"O"保留下來,然后將

其他的"O"全部替換為"X"。

地圖邊緣的"O"指的是那些處于第一行/列或最后一行/列上的"O",以及從這些"O"的相鄰位置(上下左右)

延伸出去的"O"。

時間限制:1000

內(nèi)存限制:65536

輸入

第一行是一個正整數(shù)T,表示一共有T組數(shù)據(jù)。對于每組數(shù)據(jù),其第一行是兩個正整數(shù)R和C,表示地圖

的大小,用一個空格分開。接下來的R行,每行包含了C個字符,分別是"X"或"O"。其中,0<T<=

10,0<R,C<=500。

輸出

對于每組數(shù)據(jù),輸出R行,每行包含了C個字符,分別是"X"或"O"。每組數(shù)據(jù)之間需要額外輸出一個空

行。

樣例輸入

2

23

OXX

XXO

55

XXXOX

XXXOX

XOOXX

XXOXX

XOXXX

樣例輸出

OXX

XXO

XXXOX

XXXOX

XXXXX

XXXXX

XOXXX

答案

#include<iostream>

#include<cstring>

usingnamespacestd;

intr,c;

chara[505][505];

intdirx[4]={0,0,1,-1};

intdiry[4]={1,-1,0,0};

voiddfs(intx,inty){

for(inti=0;i<4;i++){

intnx=x+dirx[i];

intny=y+diry[i];

if(a[nx][ny]=='O'){

a[nx][ny]='?';

dfs(nx,ny);

}

}

}

intmain(){

intt;

cin>>t;

while(t--){

memset(a,0,sizeof(a));

cin>>r>>c;

inti,j;

for(i=1;i<=r;i++)

for(j=1;j<=c;j++)

cin>>a[i][j];

for(i=1;i<=r;i++){

if(a[i][1]=='O'){

a[i][1]='?';

dfs(i,1);

}

if(a[i][c]=='O'){

a[i][c]='?';

dfs(i,c);

}

}

for(i=1;i<=c;i++){

if(a[1][i]=='O'){

a[1][i]

第3題

42點

42是:

問答題

?組合數(shù)學上的第5個卡特蘭數(shù)

?字符'*'的ASCII碼

?鉬的原子序數(shù)

?6與9的乘積結(jié)果的13進制表示

?生命、宇宙以及任何事情的終極答案

?以及表達式(1+5)/2*(6-4)*7的值

因此,小機器人Marvin發(fā)明了這個叫42點的小游戲。在這個游戲中,玩家會獲得n個數(shù)。玩家需要使

用'+'、'-'、'*'、'/'、'('、')'以及這n個數(shù)構(gòu)成一個合法的中綴表達式,并使得該表達式的值為42。n個數(shù)

之間的順序可以改變。表達式運算過程中只能出現(xiàn)整數(shù)。

由于過于抑郁,Marvin無力完成這個游戲,于是來找你幫忙。你的任務是對于給定的n個數(shù),判斷他們是

否能根據(jù)上述游戲規(guī)則算出42。

時間限制:1000

內(nèi)存限制:65536

輸入

第一行為一個數(shù)n,1<=n<=6。第二行為n個數(shù),每個數(shù)均為[1,13]范圍內(nèi)的整數(shù)。

輸出

輸出一行,若可以算出42則輸出"YES",否則輸出"NO"(注意大小寫)。

樣例輸入

6

152647

樣例輸出

YES

答案

#include<iostream>

usingnamespacestd;

booldfs(inta[],intn){

if(n==1){

returna[0]==42;

}

for(inti=0;i<n;++i){

for(intj=i+1;j<n;++j){

intb[10];

intm=0;

for(intk=0;k<n;++k){

if(k==i||k==j)continue;

b[m++]=a[k];

}

++m;

b[m-1]=a[i]+a[j];if(dfs(b,m))return1;

b[m-1]=a[i]-a[j];if(dfs(b,m))return1;

b[m-1]=a[j]-a[i];if(dfs(b,m))return1;

b[m-1]=a[i]*a[j];if(dfs(b,m))return1;

if(a[j]!=0)b[m-1]=a[i]/a[j];if(dfs(b,m))return1;

if(a[i]!=0)b[m-1]=a[j]/a[i];if(dfs(b,m))return1;

}

}

return0;

}

intmain(){

intn;

inta[10];

cin>>n;

for(inti=0;i<n;++i)cin>>a[i];

if(dfs(a,n))cout<<"YES"<<endl;

elsecout<<"NO"<<endl;

system("pause");

return0;

}

第4題

問答題

ProjectSummer游戲

小I和小B最近沉迷一款叫做《ProjectSummer》的游戲,小I扮演這個游戲中需要逃生的無辜者

(Innocent),小B扮演這個游戲中抓住無辜者,阻止其逃生的背叛者(Betrayer)。

這個游戲的地圖是一個N行M列的矩形,每個格點表示一個位置。

'#'表示地圖中的障礙物,'.'表示地圖中的空地,此外,地圖中還有只有背叛者才能使用的傳送門,用小寫

字母'a'-'z'標記,它們在地圖上成對出現(xiàn)。

角色可以花費1單位的時間從一個格子走到上下左右相鄰的4個空地中的另一個格子(不可以走出地圖邊界或

者走到障礙物上)。此外,當小B扮演的背叛者走到一個傳送門上時,他可以花費1單位的時間從當前格子

傳送到與當前格子相同字母的另一個傳送門處(他也可以選擇不傳送,此時沒有花費任何時間,待在原地不

動)。

傳送是雙向的。比如,現(xiàn)在小B走到了標記為'a'的格子上,那么他可以選擇花費一單位的時間傳送到另一

個標記為'a'的格子上,也可以選擇不傳送,那么他就待在原地不動。

現(xiàn)在,小I被小B的陷阱困住了,無法移動。給出地圖上小B和小I所在的格子(他們都站在空地上),

求小B最少需要花費多少時間才能走到小I所在的格子抓住他。如果小I無法抓住小B,輸出-1

時間限制:1000

內(nèi)存限制:65536

輸入

第一行一個數(shù)字T,表示數(shù)據(jù)組數(shù)。接下來描述T組數(shù)據(jù),每組數(shù)據(jù)最開始是兩個正整數(shù)N,M表示地圖是

N行M列的矩形。接下來N行,每行M個字符,表示地圖。在地圖上,用'.'表示空地,'#'表示障礙

物,'a'-'z'表示傳送門,'B'表示小B的初始位置,'I'表示小I的初始位置。對于每組數(shù)據(jù),保證在地圖上

標記相同的傳送

門恰好出現(xiàn)兩次。T,N,M<=100

輸出

T行,第i行輸出'Case#i:t',表示第i組數(shù)據(jù)的答案是t.小B最少需要t單位時間才能走到小I所在的格

子。如果小I無法抓住小B,輸出-1

樣例輸入

3

55

Bx#..

#a.#.

.....

##..#

.x.aI

55

BIa.a

x#.x.

.#.##

.....

#####

22

B#

#I

樣例輸出

Case#1:4

Case#2:1

Case#3:-1

提示

對于第一組數(shù)據(jù),假設(shè)行從上到下標號1到5,列從左到右標號1到5,小B初始在(1,1)。小B的最優(yōu)

路線是:(1,1)->(1,2)->(2,2)->(5,4)->(5,5)

。也就是走到標記為x的傳送門時忽略傳送門,走到標

記為a的傳送門時使用傳送門。對于第二組數(shù)據(jù),小B直接花費1單位時間向右走一格就可以抓住小I,故

輸出1。對于第三組數(shù)據(jù),小B無法走到小I所在的位置上,故輸出-1。

答案

#include<iostream>

#include<cstring>

#include<queue>

usingnamespacestd;

intT,N,M;

int

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論