2 solutions
-
0
读取整个命令(string),对其中字符迭代处理
#include <iostream> using namespace std; void forward(int n,int& x,int& y); void backward(int n,int& x,int& y); void left(int n,int& x,int& y); void right(int n,int& x,int& y); int main(){ int n,t; cin>>n>>t; int x,y; string cmd; while(t--){ cin>>x>>y; cin>>cmd; for(char ch: cmd){ switch(ch){ case 'f': forward(n,x,y); break; case 'b': backward(n,x,y); break; case 'l': left(n,x,y); break; case 'r': right(n,x,y); break; } // if(ch == 'f') forward(n,x,y); // else if(ch == 'b') backward(n,x,y); // else if(ch == 'l') left(n,x,y); // else right(n,x,y); } cout<<x<<' '<<y<<endl; } } void forward(int n,int& x,int& y){ if(y+1<=n) y++; } void backward(int n,int& x,int& y){ if(y-1>=1) y--; } void left(int n,int& x,int& y){ if(x-1>=1) x--; } void right(int n,int& x,int& y){ if(x+1<=n) x++; } -
0
签到题,不解释。只要判断越界的边界情况即可。
#include <stdio.h> #include <algorithm> int n, k; int x, y; char s[114]; void solve() { scanf("%d%d%s", &x, &y, s); for (int i = 0; s[i]; ++i) switch (s[i]) { case 'f': y = std::min(y + 1, n); break; case 'b': y = std::max(y - 1, 1); break; case 'l': x = std::max(x - 1, 1); break; case 'r': x = std::min(x + 1, n); break; } printf("%d %d\n", x, y); } int main() { scanf("%d%d", &n, &k); while (k--) solve(); }
- 1
Information
- ID
- 40
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 1
- Tags
- # Submissions
- 190
- Accepted
- 98
- Uploaded By