[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秋
文章图片
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
【[17无验证]矩形游戏-字节跳动2018秋】其他写法
#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]); } }

    推荐阅读