这道题的就是简单得模拟即可;
但是要注意的地方是当存在447的情况是会出现无限循环 :477 447 477 447........
所以要把它当成特别情况拿出来区分,这样才不会超时
if(0==k) break;的位置要放对,应该在一进循环就判断k是否为0;不能等操作过一次之后再判断
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
char st[
100100];
int main(){
int n,k,counter;
scanf("%d%d",&n,&
k);
scanf("%s",st+
1);
for(
int i=
1;i<n;i++
){
if(
0==k)
break;
if(st[i]==
'4'&&st[i+
1]==
'7'){
k--
;
if(i%
2==
1){
st[i+
1]=
'4';
if(i+
2<=n&&st[i+
2]==
'7'){
st[i+
1]=(k&
1)?
'7':
'4';
break;
}
}
else st[i]=st[i+
1]=
'7',i-=
2;
}
}
printf("%s\n",st+
1);
return 0;
}
转载于:https://www.cnblogs.com/yuanshixingdan/p/5482491.html