这是题目:https://www.luogu.com.cn/problem/P1101
#include<stdio.h>
int main()
{
char a[100000],b[200][200];
int n,k=1;
scanf("%d",&n);
for(int j=1; j<=n; j++)
{
for(int i=1; i<=n; i++)
{
scanf(" %c",&b[j][i]);
if(b[j][i]!='\n')//将二维数组转化为一维数组
{
a[k]=b[j][i];
k++;
}
}
}
for(int i=1; i<k; i++)
{
if(a[i]=='y')//字符串顺序相连
{
if(a[i+1]=='i'&&a[i+2]=='z'&&a[i+3]=='h'&&a[i+4]=='o'&&a[i+5]=='n'&&a[i+6]=='g')//字符串横向相连
{
for(int j=0; j<7; j++)
a[i+j]-=32;
}
else if(a[i+(n+1)]=='i'&&a[i+2*(n+1)]=='z'&&a[i+3*(n+1)]=='h'&&a[i+4*(n+1)]=='o'&&a[i+5*(n+1)]=='n'&&a[i+6*(n+1)]=='g')//字符串斜向相连
{
for(int j=0; j<7; j++)
a[i+(n+1)*j]-=32;
}
else if(a[i+n]=='i'&&a[i+2*n]=='z'&&a[i+3*n]=='h'&&a[i+4*n]=='o'&&a[i+5*n]=='n'&&a[i+6*n]=='g')//字符串竖向相连
{
for(int j=0; j<7; j++)
a[i+n*j]-=32;
}
}
else if(a[i]=='g')//字符串逆序相连
{
if(a[i+1]=='n'&&a[i+2]=='o'&&a[i+3]=='h'&&a[i+4]=='z'&&a[i+5]=='i'&&a[i+6]=='y')//字符串横向相连
{
for(int j=0; j<7; j++)
a[i+j]-=32;
}
else if(a[i+(n+1)]=='n'&&a[i+2*(n+1)]=='o'&&a[i+3*(n+1)]=='h'&&a[i+4*(n+1)]=='z'&&a[i+5*(n+1)]=='i'&&a[i+6*(n+1)]=='y')//字符串斜向相连
{
for(int j=0; j<7; j++)
a[i+(n+1)*j]-=32;
}
else if(a[i+n]=='n'&&a[i+2*n]=='o'&&a[i+3*n]=='h'&&a[i+4*n]=='z'&&a[i+5*n]=='i'&&a[i+6*n]=='y')//字符串竖向相连
{
for(int j=0; j<7; j++)
a[i+n*j]-=32;
}
}
}
for(int i=1;i<k;i++)
{
if(a[i]>=97)
printf("*");
else
printf("%c",a[i]+32);
if(i%n==0&&i!=n*n)
printf("\n");
}
return 0;
}
这个题的思路就是我发现这个字符串顺序或逆序要么横着连,要么竖着连,要么斜着连然后我把二位转一维,再判断特定的位置是不是有特定的字母就好,为啥交上去只过了80,我可太难过了,求求大佬帮帮我吧。