字符处理(刷题)

1,B - TaK Code

题目大意:找出任意一个9x9的格子满足两个条件:(1)左上角和右下角的3x3要是‘#’;(2)围绕左上角和右下角3x3的格子一周的14个符号要为‘ . ’

问题:之前是一个一个找起点,然后再进行判断,判断过程也是先判断 左上角和右下角的3x3要是‘#’,然后判断 围绕左上角和右下角3x3的格子一周的14个符号要为‘ . ’  但死都不给过,没办法呀。所以AC代码是别人的思路,不过这个思想真的非常好用!

AC代码

#include<iostream>
#include<vector>
using namespace std;
const int N = 110;
char s[N][N];

//建立正确的二维数组
vector<string> v = { "###.?????",
					 "###.?????",
					 "###.?????",
					 "....?????",
					 "?????????",
					 "?????....",
					 "?????.###",
					 "?????.###",
					 "?????.###" };



int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> s[i][j];
		}
	}

	for (int i = 1; i <= n - 8; i++) {
		for (int j = 1; j <= m - 8; j++) {//确定起点

			int count = 0;
			for (int a = 0; a <= 8; a++) {
				for (int b = 0; b <= 8; b++) {
					char c = s[a + i][b + j];
					if (v[a][b] != '?') {//问号部分不用判定
						if (c == v[a][b]) count++;//一一比较,如果一样,则正确
					}
				}
			}
			if (count == 32) cout << i << " " << j << endl;
		}
	}

	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值