科大讯飞笔试题:互相踢人游戏
来源:互联网 发布:股票行情实时数据 编辑:程序博客网 时间:2024/06/07 08:22
输入为一个字符串和这个字符串的长度,
实现的功能:例如字符串LRRLRL,L朝左,R朝右,类似于两个人,面面相对,其中一个人可以把另外一个人踹出队伍,每次只有一对人可以踢出对方,不能很多人一起操作,求最后最少可以留下多少人?
举例过程:LRRLRL->LRLRL->LRRL->LRL->LR(或者LL)
则最后最多剩下两人
方法:只有RL可以互相踢出对方,一共四种情况RRLR留下L; RRLL留下L;LRLL留下R; LRLR留下R
那么如何退出递归呢?
思路一:在递归的最后(在那里递归应该结束了),定义一个return函数,问题:只是结束了那一个递归,上面的递归还在继续,core(s,s.size());这个是结束了,但是还需要继续往下面执行,出现问题
思路2:定义一个flag变量,当应该结束的时候,将flag置为true,那么每次 循环的时候就会直接退出,然而,同上面的问题一样,core(s,s.size());这个是结束了,但是还需要继续往下面执行,这样就造成了不可知的错误,本题中最后的结果是LR,然后,core(s,s.size())结束后,重新回到上次的循环中len的值变为了3,这样就访问过界了。
bool flag =false;
void core(string &s,int len){
// if(flag) return ;
for (int i=0;i<len-1;i++)
{
if(i==0){
if(s[i]=='R' &&s[i+1]=='L'){
for(int j=i+1;j<len-1;j++) s[j]=s[j+1];
s = s.substr(0,len - 1);
core(s,s.size());
if(flag) return ;
}
}
if(i != 0){
if (s[i]=='R' &&s[i+1]=='L'){
if (s[i-1]=='R'){
for(int j=i;j<len-1;j++) s[j]=s[j+1];
s = s.substr(0,len - 1);
core(s,s.size());
if(flag) return ;
}
if (s[i-1]=='L'){
for(int j=i+1;j<len-1;j++) s[j]=s[j+1];
s = s.substr(0,len - 1);
core(s,s.size());
if(flag) return ;
}
}
}
}
// return ;
flag = true;
} 阅读全文
0 0
- 科大讯飞笔试题:互相踢人游戏
- 某游戏公司笔试题
- 2018网易游戏笔试题
- 一个游戏公司的笔试题
- 2008网易游戏开发工程师笔试题
- 某游戏公司的部分笔试题
- 某游戏公司笔试题(2)
- 阿里笔试题(1) 取石子游戏
- 2008网易游戏开发工程师笔试题
- 网易五道游戏笔试题
- 天地游公司游戏开发笔试题
- 网易游戏TTT计划实习生笔试题
- 网易游戏运维笔试题
- 西山居游戏开发笔试题
- 2015网易游戏笔试题01
- 2015网易游戏笔试题04
- 网易游戏2016笔试题(三)
- 网易游戏开发软件笔试题1
- Solaris随风而去
- Ajax练习一(配置Java后台)
- 2017.9.17
- 数组排序(冒泡、排序)
- vim 或者 ls vi 命令没有了
- 科大讯飞笔试题:互相踢人游戏
- 每天做好一件事
- react和webpack
- 【SQL Server学习笔记】13:用SQL做分离DB、附加DB、架构、分区表
- Python强制键盘输入为整数
- 双曲函数
- Unity PlayerPrefs 游戏存档
- xss攻击解析
- 实用STM32的串口控制平台的实现(建议收藏)