华为机试第二题测试集错误

题目描述有一段全是0和1的字符串,可以将00变成10也可以将10变成01,可以无限次调整,问调整后的最大字串。
简单说下我的思路:
从左到右遍历,1直接过,对于0i就找后面第二个 0j,将i置1,i后面第二个数置0,再后面的数一直到j全部置1.
那么对于0110这个案例我们可以这么做
0110->0101->0011->1011,而测试库的解答应该是0110不变化。
附上我的代码:
#include<iostream>
using namespace std;
void help(string &s,int n){
    int i=0;
    while(i<n){
        if(s[i]=='1') i++; 
        else{
            int j=i+1;
            while(j<n){
                if(s[j]=='0'){
                    s[i]='1';
                    s[i+1]='0';
                    for(int k=i+2;k<=j;k++){
                        s[k]='1';
                    }
                                                     //    cout<<s<<endl;这里输出了每次变化,正式代码里删除
                    break;
                }
                else j++;
            }
            if(j==n) break;
            else i++;
        }
    }
}
int main(){
    int n,m;
    string s;
    cin>>n;
    while(n--){
        cin>>m>>s;
        help(s,m);
        cout<<s<<endl;
    }
}
#华为机试##华为##笔试题目#
全部评论
&我的思路是三个一组,挨个枚举。000>110 001变为101 010变为101 100变为110。AC了
点赞 回复 分享
发布于 2020-04-08 22:43
代码是我考试时敲的,可能有错误。但是测试集的生成明显是有问题,希望华为官方可以重视一下。
点赞 回复 分享
发布于 2020-04-08 22:44
支持,题目没有考虑两个0之间有多个111的情况
点赞 回复 分享
发布于 2020-04-09 09:36
同样是正确的算法30%的兄弟,面试时候反映一下答案错误
点赞 回复 分享
发布于 2020-04-09 09:36
过来支持一下吧,同样问题30%
点赞 回复 分享
发布于 2020-04-09 10:30
+1支持一下
点赞 回复 分享
发布于 2020-04-09 10:54
话说过了机考没
点赞 回复 分享
发布于 2020-04-11 21:24
8号参加机试的收到面试通知了么?
点赞 回复 分享
发布于 2020-04-12 08:44
好慌呀  我只通过了第3道的33%
点赞 回复 分享
发布于 2020-04-12 12:29
血亏呀,主管面面完了,据说排序要看机试成绩。
点赞 回复 分享
发布于 2020-04-19 11:47

相关推荐

点赞 评论 收藏
分享
评论
4
8
分享
牛客网
牛客企业服务