题目大意:可执行任意次操作, 操作内容:翻转前k位,但必须是严格1~k,不能跳着翻转。问最少执行几次操作使该数字变成偶数
思路:其实合法情况只有三种,0、1、2,0就是本来就是偶数,不用操作,1就是第1位恰好是偶数,这样直接翻转整个序列就能把偶数转到最后了,2代表偶数在其他位置,由于只能翻转1~k位,所以需要先把偶数转到首位,再整体翻转。如果该数字没有一个偶数位自然就是无解
Code:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string s;
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>s;//用字符串储存方便操作每一位
if((s[s.size()-1]-'0')%2==0)
{
cout<<0<<endl;
continue;
}
bool flag=false;
for(int i=0;i<s.size();i++)
{
if((s[i]-'0')%2==0)
{
flag=true;
break;
}
}
if(!flag) cout<<-1<<endl;
else
{
if((s[0]-'0')%2==0) cout<<1<<endl;
else
cout<<2<<endl;
}
}
return 0;
}