7-8 GOGO冲
小L最近无聊,一个人在家里玩起了飞行棋。她自己设定了一个游戏规则:她可以随意确定飞机的起始位置和终点位置。只有当飞机走到地图尽头(字符串末尾)的时候,飞机多出来的点数会往回走(保证每次回退过程中不会退到字符串中第一个字符),若某次投掷刚好到达末尾,则下一次投掷飞机往回走。除此之外,飞机整个过程都会往前走(从左到右)。现有一个给定的字符串str,其中大写字母F表示飞机棋子的初始位置,大写字母S表示终点,大写字母X表示棋盘。小L总共投掷了n次骰子,小L想知道他能否成功到达终点呢?
输入格式:
输入共三行,第一行输入一个字符串str,长度大于6,不超过100,表示飞行棋的地图。(字符串中仅包含X,F,S) 第二行输入一个n(1<=n<=100),表示投掷了n次。 第三行输入n个点数,每个点数在1~6的范围内。
输出格式:
输出true或者false,表示投掷了n次,能否到达终点。(中途某一次恰好到了S,也视为到达了终点,输出true)
输入样例:
在这里给出一组输入。例如:
XXXFXXSXXXX
5
1 3 3 6 2
输出样例:
在这里给出相应的输出。例如:
true
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,idx,m;
string s;
cin>>s;
int len=(int)s.size();
idx=(int)s.find('F');
int local=idx;//当前位置坐标
int fu=1,flag=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m;
for(int j=1;j<=m;j++)
{
if(local==len-1)//当走到尽头时,调整方向
fu=-1;
if(local==0)//当退到开头时,调整方向
fu=1;
local+=fu;
}
if((fu=-1))//调整方向,往前走;
fu=1;
if(s[local]=='S')
flag=1;
}
if(flag)
cout<<"true";
else
cout<<"false";
return 0;
}