郑州轻工业大学2021新生赛 2786: 这是一道数学题
题目描述
一个数通过最小次数交换数位变成20的倍数。问最少交换次数是多少?
输入
一个正整数T(1<=T<=200),代表有T组输入。每个输入包含一个正整数N(1<=N<=10的18次方),N没有前导0。
输出
最小的交换次数。如果不能交换出20的倍数,输出-1
样例输入 Copy
2
70007
680
样例输出 Copy
1
0
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
long long n;
scanf("%d",&t);
while(t--){
scanf("%lld",&n);
int l=0,e=0;
if(n%20==0) printf("0\n");
else if(n<100) printf("-1\n");
else{
int w=log10(n)+1;
int a[w];
for(int i=0;i<w;i++){
a[i]=n%10;
n/=10;
if(a[i]==0) l++;
else if(a[i]%2==0) e++;
}
if(l==0||(l==1&&e==0)) printf("-1\n");
else{
if(a[0]%2==0){
if(a[0]==0) printf("1\n");
else if(a[1]%2==0) printf("1\n");
else printf("2\n");
}
else{
if((a[1]==0&&l>1)||(a[1]%2==0&&a[1]!=0)) printf("1\n");
else printf("2\n");
}
}
}
l=0,e=0;
}
return 0;
}