每日一题-迷路的牛牛

每日一题-迷路的牛牛

  • 题目描述
  • 题目分析
  • 解决方案
  • 明天的题

题目描述

本题来自牛客网,为网易2019年校招题之一。(点我跳转)

题目描述:
牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他。
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。
接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。
输出描述:
输出牛牛最后面向的方向,N表示北,S表示南,E表示东,W表示西。
时间限制:1秒 空间限制:32768K

题目分析

看见这道题的第一反应,便是可以用一个枚举型变量来模拟牛牛面向的方向,依次迭代转向来更新面向的方向。但是这不是一个很好的解决方案。根据我们的生活经验很容易得出转向问题具有以下三点性质。
第一点,两次转向之间具有交换律,即先向右转再向左转等价于先向左转再向右转。
第二点,不同方向的转向能相互抵消,即向右转再向左转等价于不转向。
第三点,连续向一个方向转4次等价于没有转向。
接下来的解决方案便是基于以上三点求得。

解决方案

由于转向具有交换律,因此无需在迭代转向时,时刻更新面向的方向,只需统计向左转与向右转的次数。接着,根据第二条性质,将其两者次数相减,然后根据第三条性质,将差对4取余即可得出等价的转向次数。
下面给出其核心代码吧。

for(int i=0;i<n;i++)
{
	if('L'==d.at(i))//n为牛牛转向的次数,d为记录牛牛转向的字符串
		t--;
	else
    	t++;
}
t=t%4;//t为等价的向右转的次数

明天的题

牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。
但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。
牛牛希望你能帮他计算一共有多少个可能的数对。

你可能感兴趣的:(每日一题,编程题)