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

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
点赞 6 评论
分享
牛客网
牛客企业服务