首页 > 技术交流 > 奇安信10.18 笔试编程题

奇安信10.18 笔试编程题

头像
ruiFly
编辑于 2020-10-18 16:33:11 APP内打开
赞 5 | 收藏 1 | 回复18 | 浏览1186
1.爬图找路径最大值(右、下)-递归回溯

    static int findMaxOath(int[][] matrix, int nowX, int nowY, int endX, int endY, int nowSum ,int[][] maxNow){
        nowSum += matrix[nowX][nowY];
        if (nowSum < maxNow[nowX][nowY])
            return Integer.MIN_VALUE;
        else
            maxNow[nowX][nowY] = nowSum;
        if (nowX == endX && nowY == endY)
            return nowSum;
        else if (nowX == endX && nowY != endY)
            return findMaxOath(matrix, nowX, nowY + 1, endX, endY, nowSum, maxNow);
        else if (nowY == endY && nowX != endX)
            return findMaxOath(matrix, nowX + 1, nowY, endX, endY, nowSum, maxNow);
        else
            return Math.max(findMaxOath(matrix, nowX, nowY + 1, endX, endY, nowSum, maxNow), findMaxOath(matrix, nowX + 1, nowY, endX, endY, nowSum, maxNow));

    }

    public static void main(String[] args) {
        int[][] matrix = new int[][]{{2,3,1},{2,5,3},{4,2,1}};
        int m = matrix.length;
        int n = matrix[0].length;
                
                //使用一个存储路过同一位置的最大值,小于放弃此路径的继续探索
                //无此优化,只能过57%左右
        int[][] maxNow = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                maxNow[i][j] = Integer.MIN_VALUE;
            }
        }


        System.out.println(findMaxOath(matrix, 0, 0, m - 1, n - 1, 0, maxNow));
    }  

2.简单的大数求200内递归-考察大数用法

    static BigInteger jiecheng(int n){
        if (n == 1)
            return BigInteger.valueOf(1);
        else{
            return BigInteger.valueOf(n).multiply(jiecheng(n - 1));
        }
    }

    public static void main(String[] args) {
//
//        while (true){
//            Scanner sc = new Scanner(System.in);
//            int n = sc.nextInt();
//
//            if (n < 1 || n > 200)
//                System.out.println("Error");
//            else
//            {
//                System.out.println(jiecheng(n));
//            }
//        }

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        if (n < 1 || n > 200)
            System.out.println("Error");
        else
        {
            System.out.println(jiecheng(n));
        }
    }



18条回帖

回帖
加载中...
话题 回帖

推荐话题

相关热帖

技术交流近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐