兰顿蚂蚁


<span style="font-size:24px;">蓝桥杯  历届试题 兰顿蚂蚁  </span><pre name="code" class="html">

 
上面为题目链接
下面为解题步骤
</pre><pre name="code" class="java">import java.util.Scanner;

public class Ant {

	/**
	 * 兰顿蚂蚁
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();// 正方形格子的行数
		int n = sc.nextInt();// 正方形格子的列数
		int[][] a = new int[m][n];// 定义一个数组存储正方形格子
		// 格子的初始化
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				a[i][j] = sc.nextInt();
			}
		}
		// 蚂蚁所在行号:x 及列号:y
		int x = sc.nextInt();
		int y = sc.nextInt();
		// 接收表示方向的字符串
		String s = sc.next();
		// 将字符串转化为字符,因为只有一个字符,所以取下标为0的字符
		char direction = s.charAt(0);
		// 蚂蚁走的步数
		int k = sc.nextInt();
		while (k-- > 0) {
			// 判断在白格还是黑格
			// 若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
			if (a[x][y] == 1) {
				a[x][y] = 0;
				// 判断方向
				switch (direction) {
				case 'U':// 上时右转90度为右R
					direction = 'R';
					//判断是否越界,以下类似
					if (y < n - 1) {
						y++;
					}
					break;
				case 'D':// 下时右转90度为左L
					direction = 'L';
					if (y > 0) {
						y--;
					}
					break;
				case 'L':// 左时右转90度为上U
					direction = 'U';
					if (x > 0) {
						x--;
					}
					break;
				case 'R':// 右时右转90度为下D
					direction = 'D';
					if (x < m - 1) {
						x++;
					}
					break;
				default:
					break;
				}
			} else if (a[x][y] == 0) {
				// 若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
				a[x][y] = 1;
				switch (direction) {
				case 'U':// 上时左转90度为左L
					direction = 'L';
					if (y > 0) {
						y--;
					}
					break;
				case 'D':// 下时左转90度为右R
					direction = 'R';
					if (y < n - 1) {
						y++;
					}
					break;
				case 'L':// 左时左转90度为下D
					direction = 'D';
					if (x < m - 1) {
						x++;
					}
					break;
				case 'R':// 右时左转90度为上U
					direction = 'U';
					if (x > 0) {
						x--;
					}
					break;
				default:
					break;
				}
			}
		}
		System.out.println(x + " " + y);

	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值