首页 > 试题广场 >

迷路的牛牛

[编程题]迷路的牛牛
  • 热度指数:1645 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他。

输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。
接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。


输出描述:
输出牛牛最后面向的方向,N表示北,S表示南,E表示东,W表示西。
示例1

输入

3
LRR

输出

E
(function main(){
    var str = readline();
    var count = 0;
    var len = str.length;
    for(var i =0; i<len; i++){
        if(count==0&&str[i]=='L'){
            count = 3;
        }else if(count ==3&&str[i]=="R"){
            count = 0;
        }else if(str[i]=="L"){
            count --;
        }else if(str[i]=="R"){
            count ++;
        }
    }
    var res ;
    switch(count){
        case 0: res ="N"; break;
        case 1: res ="E"; break;
        case 2: res ="S"; break;
        case 3: res ="W"; break;
    }
    print(res);
})();


编辑于 2019-08-02 09:14:06 回复(2)

简单粗暴版本...

const directionCache = {
            'N': {
                'L': 'W',
                'R': 'E'
            },
            'E': {
                'L': 'N',
                'R': 'S'
            },
            'S': {
                'L': 'E',
                'R': 'W'
            },
            'W': {
                'L': 'S',
                'R': 'N'
            }
};
while(line=readline()) {
    let currentDirection = 'N';
    if(line == 0) {
        console.log(currentDirection);
        continue;
    };
    /*
       北
     西  东
       南
    */
    const directionArr = readline().split('');
    directionArr.forEach(c => {
        currentDirection = directionCache[currentDirection][c];
    });
    console.log(currentDirection);
}
发表于 2019-08-02 08:52:45 回复(0)
#include<stdio.h>
 
intmain(){
 
    intdirection[4][2]; //北0南1西2东3
    direction[0][0] = 2; //北边左转是 西
    direction[0][1] = 3; //北边右转是 东
    direction[1][0] = 3; //南边
    direction[1][1] = 2;
    direction[2][0] = 1; //西边
    direction[2][1] = 0;
    direction[3][0] = 0; //东边
    direction[3][1] = 1;
 
    intn, k = 0;
    scanf("%d", &n);
    char* turn = newchar[n];
     
    getchar();
    scanf("%s", turn);
    getchar();
 
    for(inti=0; i<n; ++i){
        switch(turn[i]){
            case'L': k = direction[k][0]; break;
            case'R': k = direction[k][1]; break;
            default: printf("%s\n", "输入了非法字符!"); return0;
        }
    }
 
    switch(k){
        case0: printf("%c\n", 'N'); break;
        case1: printf("%c\n", 'S'); break;
        case2: printf("%c\n", 'W'); break;
        case3: printf("%c\n", 'E'); break;
    }
}

发表于 2018-09-09 23:28:36 回复(0)
#include<iostream>
using namespace std;
int main(){
    int N;
    while(cin>>N){
        int dir = 0;
        for(int i=0;i<N;i++){
            char temp;
            cin>>temp;
            if(temp=='L'){
                dir = (dir+1)%4;
            }
            else{
                dir = (dir+3)%4;
            }
        }
        if(dir==0){
            cout<<"N";
        }
        else if(dir==1){
            cout<<"W";
        }
        else if(dir==2){
            cout<<"S";
        }
        else{
            cout<<"E";
        }
    }
    return 0;
}

发表于 2018-07-19 15:36:10 回复(0)
var num  = parseInt(readline());
var str = readline();
function List(x) {
    this.val = x;
    this.left = null;
    this.right = null;
}
var nodeN = new List("N");
var nodeS = new List("S");
var nodeE = new List("E");
var nodeW = new List("W");
 
nodeN.left = nodeW;
nodeN.right = nodeE;
nodeS.left = nodeE;
nodeS.right = nodeW;
nodeE.left = nodeN;
nodeE.right = nodeS;
nodeW.left = nodeS;
nodeW.right = nodeN;
function getDirection(num, str) {
    if(num !== str.length) {
        return "";
    }
    var node = nodeN;
    for(var i = 0; i < num; i++) {
        if(str[i] === "L") {
            node = node.left;
        } else if(str[i] === "R" ) {
            node = node.right;
        }
    }
   return node.val;
}
console.log(getDirection(num, str));

编辑于 2018-07-07 14:45:58 回复(0)
(function where(){
    var arr = ["N","E","S","W"];
    var n = readline();
    var str = readline();
    var count = 0;
    var len = str.length;
    for(var i =0; i<len; i++){
        //str总共只有两种L和R
        if(count===0&&str[i]==='L'){  //这里定义R也一样
            count = 3;
        }else if(count ===3&&str[i]==="R"){ //处理边界值,不能超过3
            count = 0;
        }else if(str[i]==="L"){
            count --;
        }else if(str[i]==="R"){
            count ++;
        }
    }
    var res = arr[count];
    print(res);
})()
发表于 2018-06-27 11:08:22 回复(0)
var a=readline();
var countl=0,countr=0,count;
var array=['N','E','S','W'];
var line=readline();
while(a--){
if(line[a]=='L'){
countl++;
}else{
countr++;
}
}
count=countr-countl;
if(count%4>=0){
console.log(array[count%4]);
}else{
console.log(array[count%4+4]);
}

编辑于 2018-08-08 12:50:42 回复(0)
var line = readline();
var a = readline();
function checkposition(str){
    var position = 'N';
    var road = str.split("");
    for(let i=0;i<road.length;i++){
        switch(position){
            case 'N':
                if(road[i]==='L'){
                    position = 'W';
                    break;
                }
                else{
                    position = 'E';
                    break;
                }
            case 'W':
                if(road[i]==='L'){
                    position = 'S';
                    break;
                }
                else{
                    position = 'N';
                    break;
                }
            case 'S':
                if(road[i]==='L'){
                    position = 'E';
                    break;
                }
                else{
                    position = 'W';
                    break;
                }
            case 'E':
                if(road[i]==='L'){
                    position = 'N';
                    break;
                }
                else{
                    position = 'S';
                    break;
                }
        }
    }
    return position;
}
console.log(checkposition(a));

些许暴力,勉强能解
发表于 2021-04-10 11:31:45 回复(0)
牛牛咋这么笨啊,没走两步就能摸丢
发表于 2021-03-18 17:15:44 回复(0)
思路:记录L和R分别的个数,判断哪个的个数多,如果两个的个数相等表示北方,如果l多或者r多的话就判断多的个数除以4的余数。例如r多的且除4的余数是1代表东,余2代表南,余3代表西,余0代表北
发表于 2020-10-12 17:40:22 回复(0)
N = int(input())
s = input()
d = 'N'
l = 0
r = 0
for i in s:
    if(i=='L'):
        l += 1
    else:
        r += 1
l = (l - r) % 4
if l == 0:
    print('N')
elif l == 1:
    print('W')
elif abs(l) == 2:
    print('S')
else:
    print('E')

发表于 2020-08-17 22:51:22 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    int num; string s; int res = 0;
    char dir[4]={'N','E','S','W'};
    cin>>num>>s;
    auto i = s.begin();
    while(i!=s.end()){
        if(*i=='L') res--;
        if(*i=='R') res++;
        i++;
    }
    res = res%4;
    res>=0?cout<<dir[res]:cout<<dir[4+res];
    return 0;
}

编辑于 2020-04-24 21:38:12 回复(0)
var n = parseInt(readline());
var s = readline();
var drur = ['N', 'E', 'S', 'W'];
var drul = ['N', 'W', 'S', 'E'];
var lcount = 0;
var rcount = 0;
for(var i = 0; i < n; i++){
    if(s[i] == 'L') lcount++;
    else rcount++;
}
var res = Math.abs(lcount - rcount) % 4;
lcount > rcount ? print(drul[res]) : print(drur[res]);

发表于 2020-04-10 15:42:27 回复(0)
#include <iostream>
using namespace std;
int main(){
    char a[1001];
    int i=0,r=0,l=0,c;
    int total;
    cin>>total;
    for(i=1;i<=total;i++){
        cin>>a[i];
        if(a[i]=='R'){r++;}
        if(a[i]=='L'){l++;}
    }
    if(r>l){
        c=r-l;
        if(c%4==0){cout<<"N";}
        if(c%4==1){cout<<"E";}
        if(c%4==2){cout<<"S";}
        if(c%4==3){cout<<"W";}
    }
    if(l>r){
        c=l-r;
        if(c%4==0){cout<<"N";}
        if(c%4==1){cout<<"W";}
        if(c%4==2){cout<<"S";}
        if(c%4==3){cout<<"E";}
    }
    return 0;

发表于 2020-04-04 22:56:35 回复(0)
(function(){
    var line = parseInt(readline());
    var direction = readline();
    var left = 0;
    var right = 0;
    for(var i=0;i<=direction.length;i++){
        switch(direction.charAt(i)){
            case 'L':left++;break;
            case 'R':right++;break;
        }
    }
    if(left%4!=0){
        left = left%4;
    }else{
        left = 0;
    }
    if(right%4!=0){
        right = right%4;
    }else{
        right = 0;
    }
    var res;
    if(left>right){
        var step = left-right;
        switch(step){
            case 0: res ="N"; break;
            case 1: res ="W"; break;
            case 2: res ="S"; break;
            case 3: res ="E"; break;
         }
    }
    if(left<=right){
        var step = right-left;
        switch(step){
            case 0: res ="N"; break;
            case 1: res ="E"; break;
            case 2: res ="S"; break;
            case 3: res ="W"; break;
         }
    }
    print(res);
})()
发表于 2019-08-29 15:56:55 回复(0)
wx_头像 wx_

利用字典

n=int(input())

st=input()

n={'L':'W','R':'E'}

s={'L':'E','R':'W'}

e={'L':'N','R':'S'}

w={'L':'S','R':'N'}

res='N'

for i inst:

    if res=='N':

        res=n[i]

    elif res=='S':

        res=s[i]

    elif res=='E':

        res=e[i]

    else:

        res=w[i]

print(res)
发表于 2019-08-02 10:12:40 回复(0)
(function main(){
    var n = readline(); 
    var dirArr =String(readline()).split('');
    var len = dirArr.length;
    var times= n;
    var final= 0;
//将左右转化为数字,左为-1.右为1
    for(var i=0;i<len;i++){
        switch(dirArr[i])
        {
            case "L":
            dirArr[i]= -1;
            break;

            case "R":
            dirArr[i]= 1;
            break;
        }
        
    }

//将所有数字相加
    for(var j=0;j<times;j++){

        final = final+dirArr[j];
    }
//4为一个循环,当他们大于4则减掉4
    while(final>4){
        final = final-4;
    }
//当小于-4时就加4 
   while(final<-4){
        final = final + 4;
    }
//最终得到答案
    var findir='';
    switch(final)
    {
        case 0:
        case 4 :
        case -4:
            findir="N";
            break;

        case -3:
        case 1:
            findir="E";
            break;

        case -2:
        case 2:
            findir="S";
            break;

        case 3:
        case -1:
            findir="W";
            break;    
    }
    print(findir);
})()

发表于 2019-04-02 01:05:01 回复(0)
process.stdin.resume();
process.stdin.setEncoding('ascii');
   
varinput = "";
varinput_array = "";
   
process.stdin.on('data', function(data) {
    input += data;
});
   
process.stdin.on('end', function() {
    input_array = input.split("\n");
  varl = parseInt(input_array[0]);
    varr = input_array[1];
     
    functionewns(l,r){
            if(r == undefined) returnr;
            vararr = r.split('');
            varF = "N";
            for(vari=0;i<l;i++){
                 
                switch(F){
                    case'N':
                                if('L'==arr[i]){
                                     
                                    F = 'W'
                                }elseif('R'==arr[i]){
                                     
                                    F = 'E'
                                }
                             
                            continue;
                    case'S':
                                if('L'==arr[i]){
                                    F = 'E'
                                }elseif("R"==arr[i]){
                                    F = 'W'
                                }
                             
                            continue;
                    case'E':   if("L"==arr[i]){
                                    F = 'N'
                                }elseif("R"==arr[i]){
                                    F = 'S'
                                }
                             
                            continue;
                    case'W':
                                if('L'==arr[i]){
                                     
                                    F = 'S'
                                }elseif('R'==arr[i]){
                                    F = 'N'
                                }
                             
                            continue;
                }
            }
            returnF;
        }
  console.log(ewns(l,r))
});

发表于 2019-01-03 17:13:19 回复(0)
 var num = readline();
 var str = readline();
 var count = 0;
 var len = str.length;
for(var i=0;i<len;i++){
    if(count ==3&&str[i]=='L'){
        count = 0;
    }else if(count ==0&&str[i]=='R'){
        count =3;
    }
    else if(str[i]=='L'){
        count++;
    }else if(str[i]=='R'){
        count--;
    }
}
function right(dir){
    if(dir == 0){
       return 'N'
    }else if(dir == 1){
        return  'W'
    }else if(dir ==2){
        return 'S'
    }else if(dir == 3){
        return 'E'
    }
}
var res = right(count);
console.log(res);


发表于 2018-10-18 17:36:50 回复(0)
var n=parseInt(readline());
var str=readline();
var arr=['W','N','E','S'];
var ans=1;
for(var i=0;i<n;i++){
    if(str[i]=='L'){
        ans=(ans==0?3:ans-1)
    }else{
        ans=(ans==3?0:ans+1)
    }
}
print(arr[ans])
发表于 2018-08-29 11:21:52 回复(0)