暴力枚举但是试验不可行,求看思路哪里出了问题!
查看原帖
暴力枚举但是试验不可行,求看思路哪里出了问题!
956316
77Glorious楼主2024/3/28 20:34

样例2作参考,但是单个试验后只能成功显示横向的,组合起来是RE(明明也已经判断越界了)求看问题!

#include<bits/stdc++.h>
using namespace std;
char a[110][110];
bool vis[110][110];
int n; 

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>a[i][j];
	//暴力枚举 
	
	for(int i=1;i<=n;i++)//横向往右 
		for(int j=1;j<=n;j++)
		{
			string tmp="";
			for(int k=0;k<7;k++)//横向往右存字符串
			{
				if(j+k<=n)//没有越界 
					tmp+=a[i][j+k];
				//else break; 		
			}
			if(tmp=="yizhong")
			{
				for(int k=0;k<7;k++)
					vis[i][j+k]=1;				
			}
			tmp="";
			
			for(int k=0;k>-7;k--)//横向往左边存字符串
			{
				if(1<=j+k)//没有越界 
					tmp+=a[i][j+k];
				//else break; 		
			}
			if(tmp=="yizhong")
			{
				for(int k=0;k>-7;k++)
					vis[i][j+k]=1;
				
			}
			tmp="";
			
			for(int k=0;k<7;k--)//竖向向往下边存字符串
			{
				if(i+k<=n)//没有越界 
					tmp+=a[i+k][j];
				//else break; 		
			}
			if(tmp=="yizhong")
			{
				for(int k=0;k<7;k++)
					vis[i+k][j]=1;
				
			}
			tmp="";
			
			for(int k=0;k>-7;k--)//竖向往上边存字符串
			{
				if(1<=i+k)//没有越界 
					tmp+=a[i+k][j];
				//else break; 		
			}
			if(tmp=="yizhong")
			{
				for(int k=0;k>-7;k++)
					vis[i+k][j]=1;
				
			}
			tmp="";
			
			for(int k=0;k<7;k++)//往右下边存字符串
			{
				if(i+k<=n&&j+k<=n)//没有越界 
					tmp+=a[i+k][j+k];
				//else break; 		
			}
			if(tmp=="yizhong")
			{
				for(int k=0;k<7;k++)
					vis[i+k][j+k]=1;
				
			}			
			tmp="";
			
			for(int k=0,m=0;k>-7,m<7;k--,m++)//往右上边存字符串
			{
				if(1<=i+k && j+m<=n)//没有越界 
					tmp+=a[i+k][j+m];
				//else break; 		
			}
			if(tmp=="yizhong")
			{
				for(int k=0,m=0;k>-7,m<7;k--,m++)
					vis[i+k][j+m]=1;
				
			}
			tmp="";
			
			for(int k=0,m=0;k>-7,m>-7;k--,m--)//往左上边存字符串
			{
				if(1<=i+k && 1<=j+m)//没有越界 
					tmp+=a[i+k][j+m];
				//else break; 		
			}
			if(tmp=="yizhong")
			{
				for(int k=0,m=0;k>-7,m>-7;k--,m--)
					vis[i+k][j+m]=1;
				
			}
			tmp="";
			
			for(int k=0,m=0;k<7,m>-7;k++,m--)//往左下边存字符串
			{
				if(i+k<=n && 1<=j+m)//没有越界 
					tmp+=a[i+k][j+m];
				//else break; 		
			}
			if(tmp=="yizhong")
			{
				for(int k=0,m=0;k<7,m>-7;k++,m--)
					vis[i+k][j+m]=1;
				
			}
			tmp="";						
		}
	
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			if(vis[i][j]) cout<<a[i][j];
			else cout<<'*';
		cout<<endl;
	}
	return 0;
}
2024/3/28 20:34
加载中...