蓝桥杯 兰顿蚂蚁(模拟)
歷屆試題 蘭頓螞蟻
時間限制:1.0s 內存限制:256.0MB
問題描寫敘述
<img src="http://lx.lanqiao.org/RequireFile.do?
fid=YJrfYLeN" width="354" height="355" alt="">
蘭頓螞蟻。是于1986年,由克里斯·蘭頓提出來的,屬于細胞自己主動機的一種。
平面上的正方形格子被填上黑色或白色。在當中一格正方形內有一僅僅“螞蟻”。
螞蟻的頭部朝向為:上下左右當中一方。
螞蟻的移動規(guī)則十分簡單:
若螞蟻在黑格,右轉90度,將該格改為白格。并向前移一格;
若螞蟻在白格,左轉90度。將該格改為黑格,并向前移一格。
規(guī)則盡管簡單。螞蟻的行為卻十分復雜。
剛剛開始時留下的路線都會有接近對稱,像是會反復。但不論起始狀態(tài)怎樣。螞蟻經過漫長的混亂活動后,會開辟出一條規(guī)則的“快速公路”。
螞蟻的路線是非常難事先預測的。
你的任務是依據初始狀態(tài),用計算機模擬蘭頓螞蟻在第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
僅僅想弱弱的說一句寫的代碼真挫,只是過了算了
ac代碼
#include<stdio.h>
#include<string.h>
int map[1010][1010];
int sx,sy,dir;
void fun(int sign)
{
if(dir==1)
{
if(sign)
{
dir=4;
sy++;
}
else
{
dir=3;
sy--;
}
}
else
if(dir==2)
{
if(sign)
{
dir=3;
sy--;
}
else
{
dir=4;
sy++;
}
}
else
if(dir==3)
{
if(sign)
{
dir=1;
sx--;
}
else
{
dir=2;
sx++;
}
}
else
if(dir==4)
{
if(sign)
{
dir=2;
sx++;
}
else
{
dir=1;
sx--;
}
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j,k;
char c;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
scanf("%d",&map[i][j]);
}
scanf("%d %d %c %d",&sx,&sy,&c,&k);
if(c=='U')
dir=1;
else
if(c=='D')
dir=2;
else
if(c=='L')
dir=3;
else
if(c=='R')
dir=4;
while(k--)
{
int px=sx;
int py=sy;
fun(map[sx][sy]);
if(map[px][py])
map[px][py]=0;
else
map[px][py]=1;
}
printf("%d %d
",sx,sy);
}
}
總結
以上是生活随笔為你收集整理的蓝桥杯 兰顿蚂蚁(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。