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 找试场 题解的主要内容,如果未能解决你的问题,请参考以下文章

2017.11.2洛谷 mNOIP 比赛 | T1 斐波那契找规律

UOJ Round 19 题解

CQUPT萌新赛题解(附F代码)

架构方案:测试场多环境逻辑隔离方案

题解 NOIP2020 T1 排水系统

8.29题解