[17无验证]矩形游戏-字节跳动2018秋

1.题目描述

小a在玩一个很简单的游戏,游戏的内容是控制一个小人在一块矩形的空地内走,一旦小人走出矩阵范围,游戏就失败。游戏机有上,下,左,右四个按键,每按一下小人就向相应的方向走一步。这个游戏过于简单,小a说:“这种游戏我闭着眼睛玩都输不了”。于是他便闭上眼睛,进行一连串的操作。但若他中途输了的话就会停止。
那么问题来了:给定小a的操作,进行Q次询问,你能算出每次询问小人能走多少步吗?

  • 输入描述:
    第一行为长度L的字符串S,每个字符依次代表小a的一次操作。'u'代表向上,'d'代表向下,'l'代表向左,'r'代表向右。字符串S不会包含其他字符。
    第二行是整数Q,代表Q次询问
    接下来Q行,每行有四个整数NMXY,保证1<=X<=N1<=Y<=M,矩阵大小为N*M,小人初始位置为(X,Y)
    对于30%的测试,0000
    对于100%的测试,0000
  • 输出描述:
    每次询问要求你打印一个整数s(单独一行),代表小人所走的步数。
  • 备注:
    小人踏出矩阵外的那一步也要算入结果哦
  • 输入示例:
    uuurrdddddl
    3
    5 6 3 3 
    5 6 4 2 
    6 6 4 2
    
  • 输出示例:
    3
    10
    11
    
  • 说明:
    上下左右关系以下图为例,一个N=3,M=2的矩阵是这样的:
    (1,1)(1,2)
    (2,1)(2,2)
    (3,1)(3,2)

2.题目解析

简单遍历判断是否出了矩阵即可。


[17无验证]矩形游戏-字节跳动2018秋_第1张图片

3.参考答案

#include 
using namespace std;

int main() {
  string s;
  cin >> s;
  int q = 0;
  scanf("%d",&q);
  int nums[q][4];
  for(int i=0;i

其他写法

#include 
#include 
using namespace std;
int check(string const& str,int nums[4]){
  int cur_n = nums[2];
  int cur_m = nums[3];
  int step = 0;
  for(int i=0;i!=str.size();++i){
    ++step;
    switch(str[i]){
      case 'u':
        --cur_n;
        if(cur_n<1) return step;
        break;
      case 'd':
        ++cur_n;
        if(cur_n>nums[0]) return step;
        break;
      case 'r':
        ++cur_m;
        if(cur_m>nums[1]) return step;
        break;
      case 'l':
        --cur_m;
        if(cur_m<1) return step;
        break;
    }
  }
  return step;
}

int main(){
  string str; // 操作
  cin >> str;
  int n;
  scanf("%d",&n);
  int res[n];
  for(int i=0;i!=n;++i){
    int nums[4];
    for(int j=0;j!=4;++j){
      scanf("%d",&nums[j]);
    }
    // 记录检测结果
    res[i] = check(str,nums);
  }
  // 打印结果
  for(int i=0;i!=n;++i){
    printf("%d\n",res[i]);
  }
}

你可能感兴趣的:([17无验证]矩形游戏-字节跳动2018秋)