小明滑冰(c++)wzoi

文章描述了一个编程问题,涉及计算小明在给定湖面冰块承重图上,根据初始位置、体重和滑行方向判断是否会落入湖中的过程。通过代码实现判断滑行路径上的冰块是否足够支撑小明的体重。
题目描述:

小明通过某种方法测量出了湖每块区域冰的承重量,他想知道当他从一个点沿着某个方向滑冰时,会不会落入湖中。

输入格式:

第一行一个正整数T,表示测试数据的组数。

对于每组测试数据:

第一行是两个正整数m和n,表示湖的行和列。

接下来m行每行n个字符(字符只包含数字字符0~9或#号)。其中‘#’表示陆地,数字字符则表示该位置冰块的承重量(当承重量<小明的体重时,小明会落入湖中);

下一行是三个正整数x,y,w,表示小明所站的起始位置以及小明的体重w,系统保证起始点的承重量一定大于等于小明的体重(注意:起始位置可能为陆地,但是可以继续滑行,直到掉入湖中或者遇到陆地停下来)。

再下一行是一个字符串,表示小明的滑行方向(不同字符串所代表的方向如下:“L”:向左;”R”:向右;“U”:向上;“D”:向下;“LU”:向左上;“LD”:向左下;“RU”:向右上;“RD”:向右下)。

输出格式:

每行输出0或1,0表示小明在滑行过程中不会掉入湖中,1表示会掉入湖中。

样例输入:
2
10 10
32########
222222222#
#21116141#
#21212121#
#311##121#
#311##121#
#41112111#
#21121211#
#11211151#
##########
0 0 2
RD
10 10
32########
222222222#
#21116141#
#21212121#
#311##121#
#311##121#
#41112111#
#21121211#
#11211151#
##########
1 5 2
D
样例输出:
1
0
提示:

第一个测试数据,小明从最左上角的点a[0][0]向右下方滑,滑过两格后到达a[2][2],此处承重量为1,小于小明的体重2,因此小明会掉入湖中。

第二个测试数据,小明从点a[1][5]向下滑行,沿途的经过的冰块的承重量为6和2,均不小于小明的体重,而当滑行到a[4][5]时,撞到陆地,小明不会再继续滑行,因此整个过程小明不会掉入湖中。

1<=T<=10

1<=n,m<=100

#include<bits/stdc++.h>
using namespace std;
char a[105][105];
int main() {
	int T;
	cin>>T;
	while( T-- ) {
		int m,n,x,y,t,dx,dy;
		string u;
		cin >> n >> m;
		for(int i=1; i<=n; i++)
			for(int j=1; j<=m; j++)
				cin >> a[i][j];
		cin >> x >> y >> t >> u;//起始坐标(x,y),体重t,固定方向u
		x += 1, y += 1;
		if( u == "L" )   dx = 0,  dy = -1;
		if( u == "R" )   dx = 0,  dy = 1;
		if( u == "U" )   dx = -1, dy = 0;
		if( u == "D" )   dx = 1,  dy = 0;
		if( u == "LU" )  dx = -1, dy = -1;
		if( u == "LD" )  dx = 1,  dy = -1;
		if( u == "RU" )  dx = -1, dy = 1;
		if( u == "RD" )  dx = 1,  dy = 1;
		while ( 1 ) {
			x+=dx;
			y+=dy;
			if( x<1 || x>n || y<1 || y>m || a[x][y]=='#' ) {
				cout << 0 <<endl;   //成功
				break; 
			}
			if( a[x][y]-'0' < t ) {
				cout << 1<<endl;    //失败
				break;
			}
		}
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值