蓝桥杯 算法提升-字母阵列

字母阵列

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

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

下面有一个更大的(100x100)的字母方阵。(file.txt 文件太大,这里我就不发了)
你能算出其中隐藏了多少个“LANQIAO”吗?

分析:
在这里插入图片描述



import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Main {
	public static void main(String[] args) throws IOException {
		char[][]arr = new char[100][100];
		int i=0;
		
		File file = new File("file.txt");//读取文件,注意格式
		//使用IO流读取
		BufferedReader br = new BufferedReader(new FileReader(file));
		String s = br.readLine();//一次读取一行,如果读取不到,返回null
		while(s!=null){
			arr[i] = s.toCharArray();
			i++;
			s = br.readLine();
		}
		int n = 0;//记录总个数
		String c = "";//声明用于判断的字符串,初始为空
		for (int j = 0; j < 100; j++) {
			for (int j2 = 0; j2 < 100; j2++) {//循环二维数组
				if(j2<100-6){//从左向右,如果下标满足了则可以去判断是否是“LANQIAO”
					for (int k = 0; k <=6; k++) {
						c=c+""+arr[j][j2+k];//根据规律拼接每一个字符
					}
					if(c.equals("LANQIAO")){//判断拼接的字符串是否是“LANQIAO”
						n++;//次数增加
					}
					c = "";//重置字符串
				}
				if(j2>=6){//从右到左
					for (int k = 0; k <=6; k++) {
						c=c+""+arr[j][j2-k];
					}
					if(c.equals("LANQIAO")){
						n++;
					}
					c = "";
				}
				if(j<100-6){//从上到下
					for (int k = 0; k <=6; k++) {
						c=c+""+arr[j+k][j2];
					}
					if(c.equals("LANQIAO")){
						n++;
					}
					c = "";
				}
				if(j>=6){//从下到上
					for (int k = 0; k <=6; k++) {
						c=c+""+arr[j-k][j2];
					}
					if(c.equals("LANQIAO")){
						n++;
					}
					c = "";
				}
				if(j<100-6 && j2>=6){//从左下到右上
					for (int k = 0; k <=6; k++) {
						c=c+""+arr[j+k][j2-k];
					}
					if(c.equals("LANQIAO")){
						n++;
					}
					c = "";
				}
				if(j>=6 && j2<100-6){//从右上到左下
					for (int k = 0; k <=6; k++) {
						c=c+""+arr[j-k][j2+k];
					}
					if(c.equals("LANQIAO")){
						n++;
					}
					c = "";
				}
				if(j>=6 && j2>=6){//从右下到左上
					for (int k = 0; k <=6; k++) {
						c=c+""+arr[j-k][j2-k];
					}
					if(c.equals("LANQIAO")){
						n++;
					}
					c = "";
				}
				if(j<100-6 && j2<100-6){//从左上到右下
					for (int k = 0; k <=6; k++) {
						c=c+""+arr[j+k][j2+k];
					}
					if(c.equals("LANQIAO")){
						n++;
					}
					c = "";
				}
			}
		}
		System.out.println("其中隐藏了个"+n+"“LANQIAO”");
		
	}
}

输出结果:其中隐藏了个41“LANQIAO”

总结:主要考察多种复杂的情况,主要考虑全面性,文件太多使用IO流里的方法读取文件内容是个不错的选择

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值