问题 J: 扫雷1766


该题可以直接用暴力枚举实现,只不过可以对这些算法进行优化,使其更加简洁。

点击查看代码
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
	int k,i,j,s,p,q,t=0;
	char a[11][11],b[11][11];
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%s",a[i]);
	}
	for(i=0;i<k;i++)
	{
		scanf("%s",b[i]);
	}
	for(i=0;i<k;i++)
	{
		for(j=0;j<k;j++)
		{
			if(a[i][j]=='*' && b[i][j]=='x')//踩雷了
			{
				t=1;
				break;
			}
		}
	}
	for(i=0;i<k;i++)
	{
		for(j=0;j<k;j++)
		{
			if(b[i][j]=='x') 
			{
				if(a[i][j]=='*' && t==1)
				{
					printf("*");
				}
				else
				{
					s=0;
					p=i==0?0:i-1; 
					for(;p<=i+1 && p<k;p++)//对该元素周围的位置进行排查,注意不要数组越界哦
					{
						q=j==0?0:j-1;//  j==0?0:j-1三目运算符如果j==0成立就返回0,即q=0,如果不成立那么就返回j-1,即q=j-1.
						for(;q<=j+1 && q<k;q++)
						{
							if(a[p][q]=='*') 
							{
								s++;
							}
						}
					}
					printf("%d",s);
				}
			}
			else if(a[i][j]=='*' && t==1)
			{
				printf("*");
			}
			else
			{
				printf(".");
			}
		}
		printf("\n");
	}
	return 0;
}
posted @ 2022-11-10 09:20  美羊羊给沸羊羊搬砖  阅读(72)  评论(0编辑  收藏  举报