遇见模拟题 有两种做法 例如这题:
1、直接去算次数(统计哪个数在第几位,然后去运算)
2、模拟操作
贴一个别人的代码。。。https://blog.csdn.net/weixin_39453270/article/details/80548780
#include <bits/stdc++.h> using namespace std; const int INF=0x3f3f3f3f; string str1,str2; bool vis=0; void Get(char a,char b,int n,int &ans){ str2=str1; int cnt=0; int tmp=0; for(int i=n-1;i>=0;i--){//将最后一位置为字符b if(str2[i]==b){ cnt++; for(int j=i;j<n-1;j++){ swap(str2[j],str2[j+1]); tmp++; } break; } } for(int i=n-2;i>=0;i--){//将倒数第二位置为字符a if(str2[i]==a){ cnt++; for(int j=i;j<n-2;j++){ swap(str2[j],str2[j+1]); tmp++; } break; } } if(cnt==2){//如果能够构成后缀ab if(str2[0]!='0'){ vis=1; //cout<<tmp<<endl; ans=min(ans,tmp); }//如果有前导0 else{ for(int i=0;i<n-2;i++){ if(str2[i]!='0'){//从第1位到n-2位找到第一个不为0的数 tmp+=i; vis=1; ans=min(ans,tmp); break; } } } } } int main() { cin>>str1; int len=str1.length(); int ans=INF; //四种情况贪心取最小 Get('0','0',len,ans); Get('2','5',len,ans); Get('5','0',len,ans); Get('7','5',len,ans); if(vis) cout<<ans<<endl; else puts("-1"); return 0; }