程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> (藍橋杯) 歷屆試題 蘭頓螞蟻 (模擬題)

(藍橋杯) 歷屆試題 蘭頓螞蟻 (模擬題)

編輯:關於C++

解題思路:按照題目所給的規則進行模擬:

若螞蟻在黑格,右轉90度,將該格改為白格,並向前移一格;
若螞蟻在白格,左轉90度,將該格改為黑格,並向前移一格。

只要判斷好螞蟻所在位置即黑白格即可,需要注意的是要把當前位置的黑格改為白格,白格改為黑格~~~

 

歷屆試題 蘭頓螞蟻 時間限制:1.0s 內存限制:256.0MB 問題描述 \

  蘭頓螞蟻,是於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

 

詳見代碼。

 

#include <iostream>
#include <cstdio>

using namespace std;

int dir[4][2]= {1,0,0,-1,-1,0,0,1};
//int dir[4][2]= {1,0,0,1,-1,0,0,-1};
int Map[110][110];

int main()
{
    int m,n;
    while (~scanf("%d%d",&m,&n))
    {
        for (int i=0; i<m; for="" int="" j="0;" char="" d="" step="0,i;" i="=-1)" if="" ch="='D')" while="" xl="" yl="y+dir[i][1];">=0&&Xl<m&&yl>=0&&Yl<n) x="Xl;" y="Yl;" if="" step="=k)" else="" i="0;" int="" xr="" yr="y+dir[i][1];">=0&&Xr<m&&yr>=0&&Yr<n) x="Xr;" y="Yr;" if="" step="=k)" return="" pre=""><p>
</p>
   
</n)></m&&yr></n)></m&&yl></m;></cstdio></iostream>
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved