蓝桥杯 历届试题 兰顿蚂蚁
2016-01-31 17:00
225 查看
问题描述
兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。
平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。
蚂蚁的头部朝向为:上下左右其中一方。
蚂蚁的移动规则十分简单:
若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
规则虽然简单,蚂蚁的行为却十分复杂。刚刚开始时留下的路线都会有接近对称,像是会重复,但不论起始状态如何,蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“高速公路”。
蚂蚁的路线是很难事先预测的。
你的任务是根据初始状态,用计算机模拟兰顿蚂蚁在第n步行走后所处的位置。
输入格式
输入数据的第一行是 m n 两个整数(3 < m, n < 100),表示正方形格子的行数和列数。
接下来是 m 行数据。
每行数据为 n 个被空格分开的数字。0 表示白格,1 表示黑格。
接下来是一行数据:x y s k, 其中x y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0开始编号)。s 是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k 表示蚂蚁走的步数。
输出格式
输出数据为两个空格分开的整数 p q, 分别表示蚂蚁在k步后,所处格子的行号和列号。
样例输入
5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 3 L 5
样例输出
1 3
样例输入
3 3
0 0 0
1 1 1
1 1 1
1 1 U 6
样例输出
0 0
题意较为简单,使用最基础的控制结构模拟即可
注意:前进的方向数组
~go[][]:前进的方向数组,分别表示向上,左,下,右前进一格后x,y坐标的变化状况
~0,1,2,3,分别代表蚂蚁头的朝向为:上,左,下,右
~注意是先变换格子颜色,再换头的朝向,最后前进一格
~输入一个char类型数据的方法:
1.先创建一个Scanner对象
2.调用Scanner对象的next()方法获取控制台输入,返回的是一个String类型,因为没有nextChar()方法
3.调用String的charAt(0)方法获取第一个字符
Scanner sc = new Scanner(System.in);
String s = sc.next();
char c = s.charAt(0);
~提交java代码时不能有注释,否则会有编译错误
兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。
平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。
蚂蚁的头部朝向为:上下左右其中一方。
蚂蚁的移动规则十分简单:
若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
规则虽然简单,蚂蚁的行为却十分复杂。刚刚开始时留下的路线都会有接近对称,像是会重复,但不论起始状态如何,蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“高速公路”。
蚂蚁的路线是很难事先预测的。
你的任务是根据初始状态,用计算机模拟兰顿蚂蚁在第n步行走后所处的位置。
输入格式
输入数据的第一行是 m n 两个整数(3 < m, n < 100),表示正方形格子的行数和列数。
接下来是 m 行数据。
每行数据为 n 个被空格分开的数字。0 表示白格,1 表示黑格。
接下来是一行数据:x y s k, 其中x y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0开始编号)。s 是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k 表示蚂蚁走的步数。
输出格式
输出数据为两个空格分开的整数 p q, 分别表示蚂蚁在k步后,所处格子的行号和列号。
样例输入
5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 3 L 5
样例输出
1 3
样例输入
3 3
0 0 0
1 1 1
1 1 1
1 1 U 6
样例输出
0 0
题意较为简单,使用最基础的控制结构模拟即可
注意:前进的方向数组
~go[][]:前进的方向数组,分别表示向上,左,下,右前进一格后x,y坐标的变化状况
~0,1,2,3,分别代表蚂蚁头的朝向为:上,左,下,右
~注意是先变换格子颜色,再换头的朝向,最后前进一格
~输入一个char类型数据的方法:
1.先创建一个Scanner对象
2.调用Scanner对象的next()方法获取控制台输入,返回的是一个String类型,因为没有nextChar()方法
3.调用String的charAt(0)方法获取第一个字符
Scanner sc = new Scanner(System.in);
String s = sc.next();
char c = s.charAt(0);
~提交java代码时不能有注释,否则会有编译错误
import java.util.Scanner; public class Main { public static void main(String args[]) { int a[][]=new int [105][105]; int go[][]={{-1,0},{0,-1},{1,0},{0,1}}; Scanner input=new Scanner (System.in); int m,n; int x,y,k; char s; String str; m=input.nextInt(); n=input.nextInt(); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { a[i][j]=input.nextInt(); } } x=input.nextInt(); y=input.nextInt(); str=input.next(); s=str.charAt(0); k=input.nextInt(); int pos = 0; if(s=='U') { pos=0; } if(s=='D') { pos=2; } if(s=='L') { pos=1; } if(s=='R') { pos=3; } for(int i=1;i<=k;i++) { if(a[x][y]==0) { a[x][y]=1; pos=pos+1; if(pos==4) pos=0; x+=go[pos][0]; y+=go[pos][1]; } else { a[x][y]=0; pos=pos-1; if(pos==-1) pos=3; x+=go[pos][0]; y+=go[pos][1]; } } System.out.println(x+" "+y); } }
相关文章推荐
- maven 自定义变量
- VB.NET Winform的一些功能实现
- 如何快速阅读并理解英文的技术文档
- IPhone开发“此证书是由未知颁发机构签名”解决办法
- 实例浅关-自增自减
- codeforces 617E XOR and Favorite Number (莫队)
- iOS 高性能图片圆角
- 高精度乘法
- Visual C++内存泄露检测—VLD工具使用说明
- 阿辉DirectX 11学习笔记一
- Matlab与神经网络入门
- C++ Rule of Three
- 求最大子序列的线性算法
- STL线性容器List成员函数sort的原理
- C++ 小程序
- 日志聚集相关配置参数
- maven lucene
- C++编程小讲堂 第一章
- C++ 智能指针详解
- git初始化仓库,远程提交