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; }