题目:找试场
题目描述
小王同学在坐标系的(0,0)处,但是他找不到考试的试场,于是一边走路一边问路,每个被问路的人会告诉他一个指令(包括走路或转弯),现在请编一个程序,显示他每次走路后的坐标(转弯后不必显示坐标)。
数据范围
对于50 %的数据,0<n <=20,对于100 %的数据,0<n <=500, 所有数据都在longint范围内。
输入格式
第一行一个数n,表示有n个指令,接下来n行每行一个指令,每个指令是“left” 或“right”或数字。
输出格式
(有m个走路的指令)共m行,每一行一个坐标,表示走完后的坐标。如果只是原地转弯,从来不走动,则输出“(0,0)”.
题解:———————————————————————————————————————————————————
第一次做这样的题,看了别人的题解才明白,设定一个指示方向的变量,但向左转时step+3,向右转时step+1,向右转三次相当于向左转一次。
代码实现:
#include<iostream> using namespace std; int main() { int x,y,i,n;int b[501][2]; cin>>n; x=y=0; memset(b,-1,sizeof(b)); int step=0; for(i=1;i<=n;i++) { char a[30]; cin>>a; if(0<=a[0]-'0'&&a[0]-'0'<=9) { int k,j=0,l=1; k=strlen(a); while(k>0) { j=j+(a[k-1]-'0')*l; l=l*10; k--; } switch(step){ case 0:y=y+j;break; case 1:x=x+j;break; case 2:y=y-j;break; case 3:x=x-j;break; } b[i][0]=x;b[i][1]=y; } else if(a[0]=='r') {step=step+1;step=step%4;} else if(a[0]=='l') {step=step+3;step=step%4;} } bool p=0; for(i=1;i<=n;i++) if((b[i][0]!=0||b[i][1]!=0)&&b[i][0]!=-1) p=1; if(p==0) {cout<<"(0,0)"<<endl;return 0;} for(i=1;i<=n;i++) if(b[i][0]!=-1) cout<<"("<<b[i][0]<<","<<b[i][1]<<")"<<endl; return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)