题目分析:感觉是一道简单的规律题,
为确保前小后大,只需要从头往后开始遍历找到10(因为若后面都是11等无需做任何操作)
,此时需要操作一次,
接下来再找到1要再操作一次(若是100便不需要操作,会在一次操作后变为011),
接下来再找到0要再操作一次(若是10111便不需要操作,会在两次操作后变为00111),
再找1再操作一次,
再找0再操作一次,
......以此推,找到规律,直接上代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
for(int c=0;c<t;c++)
{
int n,op=0,i=0;
string s;
cin>>n>>s;
while(i<n && s[i]=='0')
i++;//一直找到一个1为止
for(;i<n;i++)
{
if(s[i]=='0' && op%2==0 || s[i]=='1' && op%2!=0)
op++;// 后碰到与前一个不一样才+1
}
cout<<op<<"\n";
}
}