蓝桥杯算法心得——递增序列(遍历搜索)

大家好,我是晴天学长,这道是蓝桥杯19年的国赛真题,并不难,有点像简单的搜索,但是一定要仔细读题,判断遍历的每个点的搜索方向!!需要的小伙伴请自取哦!


1 )递增序列


2)算法思路

递增序列(满足一个都算)
从左向右看和从上向下看 是不同的顺序。
建立一个30 50 的字符型s数组

1.接收矩阵(快读)
2.遍历矩阵

统计递增序列
同一行的
同一列的

45度的(两个)
正45 从左往右 从上到下 注意是不一样的
逆45 从左往右 从上到下 是一样的


3).代码示例

package LanQiaoTest.枚举;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class 递增序列 {
    static char[][] N = new char[30][50];

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] s;
        for (int i = 0; i < 30; i++) {
            s = in.readLine().split("");
            for (int j = 0; j < 50; j++) {
                N[i][j] = s[j].charAt(0);
            }
        }
        int ans = 0;
        for (int i = 0; i < 30; i++) {
            for (int j = 0; j < 50; j++) {
                ans += xyz(i, j, N);
            }
        }
        System.out.println(ans);
    }

    private static int xyz(int x, int y, char[][] N) {
        int sum = 0;
        char a = N[x][y];
        //同行
        //从左往右看
        for (int i = y; i < 50; i++) {
            if (a < N[x][i]) {
                sum++;
            }
        }
        //同列
        //从上往下看
        for (int i = x; i < 30; i++) {
            if (a < N[i][y]) {
                sum++;
            }
        }
        //45度  搜索!!!
        //正45度,注意是不一样的
        //先从左到右
        for (int i = x, j = y; i >= 0 && j < 50; i--, j++) {
            if (a < N[i][j]) {
                sum++;
            }
        }
        //从上到下
        for (int i = x, j = y; i < 30 && j >= 0; i++, j--) {
            if (a < N[i][j]) {
                sum++;
            }
        }
        //逆45度,都是一样的
        for (int i = x, j = y; i < 30 && j < 50; i++, j++) {
            if (a < N[i][j]) {
                sum++;
            }
        }
        return sum;
    }
}


4).总结

  • 遍历矩阵
  • 注意方向问题

你可能感兴趣的:(算法,蓝桥杯,算法,java)