T1 找试场 题解
Posted lichangjian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T1 找试场 题解相关的知识,希望对你有一定的参考价值。
拖延症又犯了QwQ。
今天上午考试了,按照惯例,我仍然要把我会的所有题的题解写一遍。
1.找试场(way.cpp/in/out) 问题描述 小王同学在坐标系的(0,0)处,但是他找不到考试的试场,于是一边走路一边问路, 每个被问路的人会告诉他一个指令(包括走路或转弯),现在请编一个程序,显示他每次走 路后的坐标(转弯后坐标不变,所以不必显示坐标)。 初始方向向 y 轴正半轴!! 输入格式 第一行一个数 n,表示有 n 个指令,接下来 n 行每行一个指令,每个指令是“left” 或 “right”或数字。 输出格式 (有 m 个走路的指令)共 m 行,每一行一个坐标,表示走完后的坐标。如果只是原地转 弯,从开始到最后从来不走动,则输出“(0,0)”。
这是第一题,看起来还不错,打表很香的样子,但我是一个学识浅薄的小孩,我根本不知道y轴正半轴是什么意思
不慌,不慌,我们来看看样例。
样例输入 6 2 left 2 right right 3 样例输出 (0,2) (-2,2) (1,2)
样例告诉了我们一些有用的东西啊!首先,不转动的时候向前移动,是y增加。面向左向前移动,是x减少。面向右向前移动是x增加。知道了3个最后一个也很简单,是y减少。这样就可以美妙的打表了。
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> using namespace std; long long n; long long fx,x,y,shu,bj; string s; int main() { freopen("way.in","r",stdin); freopen("way.out","w",stdout); scanf("%lld",&n); for(int i=0;i<n;i++) { cin>>s; if(s[0]==‘l‘)//向左转! { fx--; if(fx==-1)//转了一圈 { fx=3; } } else if(s[0]==‘r‘)//向右转! { fx++; if(fx==4)//转了一圈 { fx=0; } }else//齐步走! { bj=1;//这个是标记,如果一直在原地转圈圈是要输出(0,0)的。 shu=0; for(int j=0;j<s.length();j++)//计算出走的步数。 { shu*=10; shu+=s[j]-‘0‘; } if(fx==0)//打表真香 { y+=shu; } if(fx==1) { x+=shu; } if(fx==2) { y-=shu; } if(fx==3) { x-=shu; } printf("(%lld,%lld) ",x,y);//输出结果 } } if(bj==0) { cout<<"(0,0)"<<endl; } return 0; }
这个题就这么愉快的结束了,下个题再见。
以上是关于T1 找试场 题解的主要内容,如果未能解决你的问题,请参考以下文章