• NOIP201502扫雷游戏


    题目

    试题描述
    扫雷游戏是一款十分经典的单机小游戏。 在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格) ,其他格子不含地雷(称之为非地雷格) 。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。 游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。现在给出 n 行 m 列的雷区中的地雷分布, 要求计算出每个非地雷格周围的地雷格数。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
    输入
    第一行是用一个空格隔开的两个整数 n 和 m,分别表示雷区的行数和列数。接下来 n 行,每行 m 个字符,描述了雷区中的地雷分布情况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。
    输出
    共 n 行,每行 m 个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。
    输入示例
    输入样例 1
    3 3
    *??
    ???
    ?*?
    输入样例 2
    2 3
    ?*?
    *??
    输出示例
    输出样例 1
    *10
    221
    1*1
    输出样例 2
    2*1
    *21
    其他说明
    数据范围:1≤n≤100,1≤m≤100。

    分析

    一道非常水的题,在每个点向八个方向,避免搜出界,如果有雷计数器++。最后输出。代码如下。

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,cnt=0;
    char a[110][110];
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<m;j++)
    		{
    			cin>>a[i][j];
    		}
    	}
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<m;j++)
    		{
    			if(a[i][j]=='*') cout<<"*";
    			else
    			{
    			    if(a[i-1][j+1]=='*') cnt++;
    			    if(a[i-1][j-1]=='*') cnt++;
    			    if(a[i-1][j]=='*') cnt++;
    			    if(a[i+1][j+1]=='*') cnt++;
    			    if(a[i+1][j-1]=='*') cnt++;
    			    if(a[i+1][j]=='*') cnt++;
    			    if(a[i][j+1]=='*') cnt++;
    			    if(a[i][j-1]=='*') cnt++;
    				cout<<cnt;
    				cnt=0;
    			}			
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    用归并排序或树状数组求逆序对数量 poj2299
    UVA10600 次小生成树
    最小生成树求最大比率 UVALive
    求树的重心 poj 1655
    求树的直径+并查集(bfs,dfs都可以)hdu4514
    树形DP+RMQ+尺取法 hdu4123
    区间dp 51nod1021
    LCS poj1080
    最长公共子序列hdu1503
    python No handlers could be found for logger错误的解决
  • 原文地址:https://www.cnblogs.com/zxjhaha/p/11327818.html
Copyright © 2020-2023  润新知