@Ada_Chow(网易–迷路的牛牛)
迷路的牛牛–C++
牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他。
输入描述
- 每个输入包含一个测试用例。
- 每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。
- 接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。
输出描述
输出牛牛最后面向的方向,N表示北,S表示南,E表示东,W表示西。
示例1
输入
3
LRR
输出
E
C++代码
#include<iostream>
#include<string>
using namespace std;
int main()
{
int i,n,count=0; //i--loop times;n--change direction times;count--number of L
cin>>n;
string s;
cin>>s;
for(i = 0;i < n;i++)
{
if(s[i] == 'L')
{
count = count+1;
}
}
if(n%4 == 1)
{
if(count%2 == 1)
cout<<'W'<<endl;
else
cout<<'E'<<endl;
}
else if(n%4 == 2)
{
if(count%2 == 1)
cout<<'N'<<endl;
else
cout<<'S'<<endl;
}
else if(n%4 == 3)
{
if(count%2 == 1)
cout<<'E'<<endl;
else
cout<<'W'<<endl;
}
else
{
if(count%2 == 1)
cout<<'S'<<endl;
else
cout<<'N'<<endl;
}
return 0;
}
无图言**
。。。。。。
思路分享
高中时学习的数学归纳法在这里可以帮点小忙。
结合代码内容,咱们定义牛牛总共七拐八拐拐了n次,其中向左拐的次数为count次,向右拐的次数为n-count次。
当n = 1时,count = 0时,R——>E; //N–>R–>E
count = 1时,L——>W; //N–>L–>W
当n = 2时,count = 0时,RR——>S; //E–>R–>S
count = 1时,LR——>N,RL——>N; //W–>R–>N; E–>L–>N
count = 2时,LL——>S; //W–>L–>S
当n = 3时,count = 0时,RRR——>W; //(RR)–>S–>R–>W
count = 1时,LRR——>E,RLR——>E,RRL——>E; //N–>R–>E;N–>R–>E;S–>L–>E
count = 2时,LLR——>W,LRL——>W,RLL——>W; //S–>R–>W;N–>L–>W;N–>L–>W
count = 3时,LLL——>E; //S–>L–>E
当n = 4时,count = 0时,RRRR——>N; //W–>R–>N
count = 1时,LRRR——>S,RLRR——>S; //E–>R–>S;E–R-->S
RRLR——>S,RRRL——>S; //E–>R–>S;W–>L–>S
count = 2时,LLRR——>N,LRLR——>N; //W–>R–>N;W–>R–>N
LRRL——>N,RLRL——>N; //E–>L–>N;E–>L–>N
RRLL——>N,RLLR——>N; //E–>L–>N;W–>R–>N
count = 3时,LLLR——>S, LLRL——>S; //E–>R–>S;W–>L–>S
LRLL——>S,RLLL——>S; //W–>L–>S;W–>L–>S
count = 4时,LLLL——>N; //E–>L–>N
当n = 5时,count = 0时,RRRRR——>E; //N–>R–>E
count = 1时,RRRRL——>W;… //N–>L–>W
…
…
…
根据以上的规律,可以推导出某公式:
n=1时,count为奇数,输出W;否则输出E。
n=2时,count为奇数,输出N;否则输出S。
n=3时,count为奇数,输出E;否则输出W。
n=4时,count为奇数,输出S;否则输出N。
n=5时,情况同n=1。
所以,
步骤一:
判断转向次数
n%41时,为第一种情况;
n%42时,为第二种情况;
n%43时,为第三种情况;
n%44时,为第四种情况。
步骤二
根据步骤一的结果,判断count奇偶性,从而得到输出结果。