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

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


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

输入

3
LRR

输出

E
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n= in.nextInt();
        String dir = in.next();

        int result = 0;
        char[] chars = dir.toCharArray();
        for (char c: chars){
            if (c == 'L') result += 1;
            else if (c == 'R') result += 3;
        }

        switch (result % 4){
            case 0: System.out.println("N");break;
            case 1: System.out.println("W");break;
            case 2: System.out.println("S");break;
            case 3: System.out.println("E");break;
        }
    }
}

向左转加1,向右转加3
发表于 2020-03-25 12:30:24 回复(0)
  • 主要是找规律,一对L和R可以抵消一次方向变化

  • 找出字符串中L和R的个数关系,然后换算出方向

  • 注意算个数关系时记得对4取余(%4)

    #include <iostream>
    (720)#include <algorithm>
    using namespace std;
    int main()
    {
      int num, numL, numR;
      int answer;  // 保存L和R的个数关系,再换算出方向
      string s;
      cin >> num;
      cin >> s;
      numL = count(s.begin(), s.end(),'L');  // 计算字符串中L的个数
      numR = count(s.begin(), s.end(),'R');
      if(numL > numR){
          answer = (numL -numR)%4;
          switch(answer){
              case 1:cout<<'W'<<endl;break;
              case 2:cout<<'S'<<endl;break;
              case 3:cout<<'E'<<endl;break;
              case 0:cout<<'N'<<endl;break;
          }
    
      }
      else{
          answer = (numR - numL)%4;
          switch(answer){
              case 1:cout<<'E';break;
              case 2:cout<<'S';break;
              case 3:cout<<'W';break;
              case 0:cout<<'N';break;
          }
      }
    
      return 0;
    }
    

```

发表于 2020-03-17 17:03:22 回复(0)
把状态变换全部列出来就可以了
#include<iostream>
(720)#include<cstring>
#include<string>
(765)#include<algorithm>
using namespace std;
int main(){
    int N;
    cin>>N;
    char s[N];
    for(int i=0;i<N;i++) cin>>s[i];
    char cur = 'N';
    for(int i=0;i<N;i++){
        if((cur=='E' && s[i]=='L') || (cur=='W' && s[i]=='R')) cur = 'N';
        else if((cur=='E' && s[i]=='R') || (cur=='W' && s[i]=='L')) cur = 'S';
        else if((cur=='N' && s[i]=='R') || (cur=='S' && s[i]=='L')) cur = 'E';
        else if((cur=='N' && s[i]=='L') || (cur=='S' && s[i]=='R')) cur = 'W';       
    }
    cout<<cur<<endl;
}

发表于 2020-03-15 21:32:57 回复(0)