iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
自我挑戰組

c++競程30天系列 第 2

Day 2 Uva118 - Mutant Flatworld Explorers

  • 分享至 

  • xImage
  •  

#h1Uva118 - Mutant Flatworld Explorers

  • 題義
    *此題先給定你一個二維陣列大小,再給你機器人的x,y座標以及他的面向東,南,西,北,接下來給你一個字串由L,R,F所組成的字串,L代表左轉90度,R代表右轉90度,F代表往前走一步,如果超出二維陣列大小,代表機器人掉出去,則顯示lost否則其他都顯示最終位置,如果機器人到了上一台機器人掉下去的位置時則忽略掉下去的指令。
  • 解法
    1.宣告一個int的二維陣列來跑機器人的位置(要大於題目所給的否則當你的機器人掉下去時你的程式也會停止跑因為超出二維陣列大小了)。
    2.用迴圈處理機器人之指令。
    3.每一次檢查是否掉出邊界。若掉出邊界,先檢查之前是不是有機器人掉落,如果有的話忽略此次指令;如果沒有的話,則判斷掉出邊界,並終止迴圈輸出此座標位置。
#include <bits/stdc++.h>
using namespace std;

int main() {
    int a,b,x,y;
    char z;
    string s;
    cin>>a>>b;
    int mp[a+1][b+1]={0};
    while(cin>>x>>y>>z>>s){
        bool ok=true;
        for(int i=0;i<s.length();i++){
            if(s[i]=='R'){
                if(z=='E'){
                    z='S';
                }else if(z=='S'){
                    z='W';
                }else if(z=='W'){
                    z='N';
                }else if(z=='N'){
                    z='E';
                }
            }else if(s[i]=='L'){
                if(z=='E'){
                    z='N';
                }else if(z=='S'){
                    z='E';
                }else if(z=='W'){
                    z='S';
                }else if(z=='N'){
                    z='W';
                }
            }else if(s[i]=='F'){
                if(z=='E'){
                    x++;
                }else if(z=='S'){
                    y--;
                }else if(z=='W'){
                    x--;
                }else if(z=='N'){
                    y++;
                }
            }
            if(x<0 || y<0 || x>a || y>b){
                if(z=='E'){
                    x--;
                }else if(z=='S'){
                    y++;
                }else if(z=='W'){
                    x++;
                }else if(z=='N'){
                    y--;
                }
                if(mp[x][y]==1){
                    continue;
                }
                mp[x][y]=1;
                ok=false;
                break;

            }
        }
        if(ok){
            cout<<x<<" "<<y<<" "<<z<<endl;
        }else{
            cout<<x<<" "<<y<<" "<<z<<" "<<"LOST"<<endl;
        }
    }
}

上一篇
Day 01 Uva100 The 3n + 1 problem
下一篇
Day 03 Uva272 - TeX Quotes
系列文
c++競程30天9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言