这个题的长度真的有点长,我直接放图片吧
这个题又是一个和谐的搜索,找到yizhong的y就开始8面搜索,遇见正确的字母就继续搜索,不正确就果断放弃,果然又是一个和谐的搜索呢。
#include<iostream> #include<string> #include<cstdio> using namespace std; string a[300],shu[300]; int aa[8]={0,-1,-1,-1,0,1,1,1},bb[8]={1,1,0,-1,-1,-1,0,1},z,a1,a2; string s="yizhong"; int main() { int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { shu[i]+='0';//初始化 } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(a[i][j]=='y')//开头出现了! { for(int x=0;x<8;x++)//8向搜索 { z=0; a1=i; a2=j; for(int ss=0;ss<6;ss++)//yizhong去掉y还有6位 { a1+=aa[x]; a2+=bb[x]; if(a1<0||a1>n||a2<0||a2>n)//越界了 { z=1; } if(a[a1][a2]!=s[ss+1])//不匹配 { z=1; } if(z==1) { break; } } a1=i; a2=j; if(z==0)//如果找到了一个完整的yizhong { for(int i=0;i<7;i++)//替换 { shu[a1][a2]=a[a1][a2]; a1+=aa[x]; a2+=bb[x]; } } } } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(shu[i][j]=='0')处理‘*’ { shu[i][j]='*'; } } } for(int i=0;i<n;i++)//输出 { cout<<shu[i]<<endl; } return 0; }
这个写的有点水,没看懂的话可以去隔壁的dgdger大佬哪里,我实在没找到其他可讲的地方了。