藍橋杯題目8蘭頓螞蟻 蘭頓螞蟻,是於1986年,由克里斯·蘭頓提出來的,屬於細胞自動機的一種。

package s3;

import java.util.Scanner;

public class test8 {
    /*
     * 標題:蘭頓螞蟻 蘭頓螞蟻,是於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
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner scan=new Scanner(System.in);
        int a=scan.nextInt();
        int b=scan.nextInt();
        int[][] c=new int[a][b];
        for(int i=0;i<a;i++){
            for(int j=0;j<b;j++){                
                c[i][j]=scan.nextInt();
            }
        }
        int x=scan.nextInt();
        int y=scan.nextInt();
        String s1=scan.next();//方向
        int k=scan.nextInt();//步數
        char s=s1.charAt(0);
        int sum=0;
        while(true){
            if(sum==k){
                break;
            }
            if(s=='U'){
                if(c[x][y]==1){
                    s='R';
                    c[x][y]=0;
                    x=x;
                    y=y+1;
                    sum++;
                //    System.out.println(x+","+y);                    
                }else{
                    s='L';
                    c[x][y]=1;
                    x=x;
                    y=y-1;
                    sum++;
                //    System.out.println(x+","+y);
                }
            }
            if(s=='D'){
                if(c[x][y]==1){
                    s='L';
                    c[x][y]=0;
                    x=x;
                    y=y-1;
                    sum++;
                    //System.out.println(x+","+y);
                }else{
                    s='R';
                    c[x][y]=1;
                    x=x;
                    y=y+1;
                    sum++;
                    //System.out.println(x+","+y);
                }
            }
            
            if(s=='L'){
                if(c[x][y]==1){
                    s='U';
                    c[x][y]=0;
                    x=x-1;
                    y=y;
                    sum++;
                    //System.out.println(x+","+y);
                }else{
                    s='D';
                    c[x][y]=1;
                    x=x+1;
                    y=y;
                    sum++;
                    //System.out.println(x+","+y);
                }
            }
            if(s=='R'){
                if(c[x][y]==1){
                    s='D';
                    c[x][y]=0;
                    x=x+1;
                    y=y;
                    sum++;
                    //System.out.println(x+","+y);
                }else{
                    s='U';
                    c[x][y]=1;
                    x=x-1;
                    y=y;
                    sum++;
                    //System.out.println(x+","+y);
                }
            }        
        }
        System.out.println(x+","+y);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章