青少年软件编程(C语言)等级考试试卷(五级)
分数:100 题数:4
一、编程题(共4题,共100分)
1.
逃离迷宫
你在一个地下迷宫中找到了宝藏,但是也触发了迷宫机关,导致迷宫将在T分钟后坍塌,为此你需要在T分钟内逃离迷宫,你想知道你能不能逃离迷宫。迷宫是一个边长为m的正方形,其中"S"表示你所在的位置,"E"表示迷宫出口,"."是可以随意走动的区域,"#"是不可穿行的墙壁,每次你可以耗费1分钟在区域间移动(上下左右四个方向)。
时间限制:1000
内存限制:65536
输入
输入包含多组数组,第一行是一个整数K(1 <= K <= 10),表示有K组数据。接下来每组数组包含整数m(2<=m<=10)和整数T,m表示正方形迷宫的边长,T表示坍塌时间。其后是一个m*m的字符矩阵,包含字符"S", "E", "."和"#"。
输出
每组数据输出一行,输出“YES"或者"NO",表示是否可以在坍塌之前逃离(也就是说移动次数是否可以不超过T)。
样例输入
2
4 7
S...
###.
.#E.
..#.
3 4
S..
..#
.#E
样例输出
YES
NO
试题编号:20240323-5-01
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:
#include <bits/stdc++.h>
using namespace std;
char map_[12][12];
int x[4]={-1,1,0,0};
int y[4]={0,0,-1,1};
int k,m,t,sign;
void dfs(int a,int b,int n){
if(n>t) return;
for(int i=0;i<4;i++){
int aa=a+x[i];
int bb=b+y[i];
if(aa>=1&&aa<=m&&bb>=1&&bb<=m){
if(map_[aa][bb]=='.'){
map_[aa][bb]='#';
dfs(aa,bb,n+1);
map_[aa][bb]='.';
}
else if(map_[aa][bb]=='E'){
sign=1;return;
}
}
}
}
int main()
{
int x1,y1;
cin>>k;
while(k--){
cin>>m>>t;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++){
cin>>map_[i][j];
if(map_[i][j]=='S'){
x1=i;y1=j;
}
}
sign=0;
dfs(x1,y1,1);
if(sign) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
考生得分:
25
是否评分:已评分
评价描述:
2.
密室逃脱
小Y喜欢玩密室逃脱,每次游戏开始时,小Y会进入一个密室,她需要按照顺序解开各个隐藏线索才能成功逃脱密室。小Y非常聪明,解开线索对她来说并不难,但是她有一点懒,她希望在通关过程中移动次数最少。请你帮小Y计算她至少要移动多少次才能成功通关。
密室是m行n列的格子矩阵,小Y从左上角(1,1)进入密室,密室中有三种格子:
墙,以数字0标记
路,以数字1标记
隐藏线索处,以数字( > 1)标记, 代表该线索的难度
小Y需要按照难度递增
202403C语言五级