这道题的就是简单得模拟即可;
但是要注意的地方是当存在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 ",st+1); return 0; }