4.8华为笔试第2题,这个解法有问题吗

题目大概意思是:给个二进制串,其中00可以修改为10,10可以修改为01,设计个算法,使修改后的二进制最大
如:输入0001,输出1101
#include<iostream>
#include<vector>
using namespace std; 
void maxchange(vector<int>&v)
{
	for(int i=0;i<v.size()-1;i++)
	{
	    if(v[i]==0) //如果当前v[i]为0,则进行修改操作 
	    {
	    	/*下面代码功能是,找到下一个0,这里有3中情况:
			  1.v[i+1]=0,则修改v[i]=1;
			  2.v[j]=0,j>i+1,且j没超过数组下标,修改v[i]=v[j]=1,v[i+1]=0;
			  3.若j超过数组下标,结束循环,这时说明只剩1个0了**/
			
			int j=i+1;
	    	while(j<v.size()&&v[j]==1) j++;
	    	if(j>=v.size()) break;
	    	else if(j==i+1) v[i]=1;
	    	else
	    	{
	    		v[i]=v[j]=1;
	    		v[i+1]=0;
			}
		}
		//当前为1不用修改,继续 
	}
}
int main()
{
	vector<int>v;
	int n;
	cin>>n;
	cout<<"请输入二进制串,以空格分开:"<<endl;
    for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		v.push_back(x);
	}
	maxchange(v);
	cout<<"------------------------结果--------------------------------"<<endl;
	for(int i=0;i<n;i++) cout<<v[i];
	return 0;
}


#华为笔试##华为##笔试题目#
全部评论
你的思路和我一样,我和很多牛友讨论过,咱们的做法是正确的,标答只考虑010的转换,没有考虑011110这些情况。我也写了个帖子,欢迎留言。
点赞 回复 分享
发布于 2020-04-09 17:54

相关推荐

牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
仁者伍敌:服务员还要脱颖而出,这是五星级酒店吗
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务