20106 字符框

题目描述

给你n∗m的二维网格,求2∗2的方格的个数,方框里面的字符可以构成'face'

输入格式

第一行输入两个整数n,m

接下来n行每行m个小写字符

1<=n,m<=50

输出格式

输出满足条件的2∗2的方格的数量

样例

样例输入

2 3
fac
cef
样例输出

2
数据范围与提示 分类标签

[二维数组] [字符数组]

C++题解代码

#include <bits/stdc++.h>
using namespace std;

char a[10][10];
int b;
int c;
int d;
int g;
int f[4];


bool fn(int h) {
  if (h == 'f') {
    if (f[0] == 0) {
      f[0] = 1;
      return true;
    } else {
      return false;
    }
  } else if (h == 'a') {
    if (f[1] == 0) {
      f[1] = 1;
      return true;
    } else {
      return false;
    }
  } else if (h == 'c') {
    if (f[2] == 0) {
      f[2] = 1;
      return true;
    } else {
      return false;
    }
  } else if (h == 'e') {
    if (f[3] == 0) {
      f[3] = 1;
      return true;
    } else {
      return false;
    }
  }
  return false;
}

// 描述该功能...
bool face(int x, char y, char z, char e) {
  f[0] = 0;
  f[1] = 0;
  f[2] = 0;
  f[3] = 0;
  if (!fn(x)) {
    return false;
  }
  if (!fn(y)) {
    return false;
  }
  if (!fn(z)) {
    return false;
  }
  if (!fn(e)) {
    return false;
  }
  return true;
}

// The main procedure
int main() {
  cin>>b;
  cin>>c;
  d = 0;
  g = (int)'a';
  for (int i = 1; i <= b; i++) {
    for (int j = 1; j <= c; j++) {
      cin>>a[i][j];
    }
  }
  for (int i = 1; i <= (b-1); i++) {
    for (int j = 1; j <= (c-1); j++) {
      if (face(a[i][j], a[i][(j+1)], a[(i+1)][j], a[(i+1)][(j+1)])) {
        d++;
      }
    }
  }
  cout<<d;
  return 0;
}

Blockly题解代码图片