字母阵列

字母阵列

仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:“LANQIAO”。
SLANQIAO
ZOEXCCGB
MOAYWKHI
BCCIPLJQ
SLANQIAO
RSFWFNYA
XIFZVWAL
COAIQNAL

我们约定: 序列可以水平,垂直,或者是斜向;
并且走向不限(实际上就是有一共8种方向)。
上图中一共有4个满足要求的串。

下面有一个更大的(100x100)的字母方阵。
你能算出其中隐藏了多少个“LANQIAO”吗?

package the_blue_cup;

import java.util.Arrays;
import java.util.Scanner;
//字母阵列
public class Demo_08 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] characterStrings = new String[100];
		
		char[][] character = new char[characterStrings.length][characterStrings.length];
		
		//插入数据
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < characterStrings.length; i++) {
			characterStrings[i] = sc.nextLine();
			character[i] = characterStrings[i].toCharArray();
		}
		
		for (int i = 0; i < character.length; i++) {
			System.out.println(Arrays.toString(character[i]));
		}
		
		//筛选出满足情况的元素
		int sum = 0;
		for (int i = 0; i < character.length; i++) {
			for (int j = 0; j < character[i].length; j++) {
				
				if (character[i][j] == 'L') {
					sum += check(i, j, character);
				}
			}
		}
		System.out.println(sum);
	}
	
	//该方法负责检索字符串
	public static int check(int row, int col, char[][] array) {
		boolean flag = true;
		char[] ref = {'A', 'N', 'Q', 'I', 'A', 'O'};
 		int sum = 0;
		//检索行
		//检索从右到左
		if (col - 6 >= 0) {
			for (int i = col - 1, j = 0; i >= col - 6 && j < 6; i--, j++) {
				if (array[row][i] != ref[j]) {
					flag = false;
				}
			}
		}else {
			flag = false;
		}
		
		if (flag) {
			sum++;
		}
		
		
		
		//检索从左到右
		//重置标记
		flag = true;
		if (col + 6 <= array[row].length - 1) {
			for (int i = col + 1, j = 0; i <= col + 6 && j < 6; i++, j++) {
				if (ref[j] != array[row][i]) {
					flag = false;
				}
			}
		}else {
			flag = false;
		}
		
		if (flag) {
			sum += 1;
		}
		
		
		//检索从上到下
		//重置标记
		flag = true;
		if (row + 6 <= array[row].length - 1) {
			for (int i = row + 1, j = 0; i <= row + 6 && j < 6; i++, j++) {
				if (ref[j] != array[i][col]) {
					flag = false;
				}
			}
		}else {
			flag = false;
		}
		
		if (flag) {
			sum += 1;
		}
		
		//检查从下到上
		//重置标记
		flag = true;
		if (row - 6 >= 0) {
			for (int i = row - 1, j = 0; i >= row - 6 && j < 6; i--, j++) {
				if (array[i][col] != ref[j]) {
					flag = false;
				}
			}
		}else {
			flag = false;
		}
		
		if (flag) {
			sum++;
		}
		
		//检查从左上到右下
		flag = true;
		if (row + 6 <= array.length - 1 && col + 6 <= array[row].length - 1) {
			for (int i = row + 1, j = col + 1, k = 0; i <= row + 6 && j <= col + 6; i++, j++, k++) {
				if (ref[k] != array[i][j]) {
					flag = false;
				}
			}
		}else {
			flag = false;
		}
		
		if (flag) {
			sum += 1;
		}
		
		//检查从右下到左上
		flag = true;
		if (row - 6 >= 0 && col - 6 >= 0) {
			for (int i = row - 1, j = col - 1, k = 0; i >= row - 6 && j >= col - 6; i--, j--, k++) {
				if (ref[k] != array[i][j]) {
					flag = false;
				}
			}
		}else {
			flag = false;
		}
		
		if (flag) {
			sum += 1;
		}
		
		//检查从左下到右上
		flag = true;
		if (row - 6 >= 0 && col + 6 <= array[col].length - 1) {
			for (int i = row - 1, j = col + 1, k = 0; i >= row - 6 && j <= col + 6; i--, j++, k++) {
				if (ref[k] != array[i][j]) {
					flag = false;
				}
			}
		}else {
			flag = false;
		}
		
		if (flag) {
			sum += 1;
		}
		
		//检查从右上到左下
		flag = true;
		if (row + 6 <= array.length - 1 && col - 6 >= 0) {
			for (int i = row + 1, j = col - 1, k = 0; i <= row + 6 && j >= col - 6; i++, j--, k++) {
				if (ref[k] != array[i][j]) {
					flag = false;
				}
			}
		}else {
			flag = false;
		}
		
		if (flag) {
			sum += 1;
		}
		
		return sum;
		
	}

}

输出结果:
41

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值