zoukankan      html  css  js  c++  java
  • 面试题目......

    题目一:

    1、从n个人中选择任意数量的人员组成一支队伍,然后从一支队伍中选出一位队长,不同的队长算不同的组合,问这样的组合的数量对10^9+7取模 。

    1

    数据范围:1 <= n <= 1000000000;

    示例

    输入:n = 2

    输出:4

    解释,(1),(2)(1,2),(2,1)四种,括号第一个为队长

    import java.util.Scanner;
    
    public class Main {
        static int mod = 1000000007;
    
        static long binaryPow(long a) {
            if (a == 0)
                return 1;// 2^0=1 b==0
            long mul = binaryPow(a/2);
            if ((a & 1) == 0) {//偶数
                return (mul * mul) % mod;
            } else {
                return (2 * mul * mul) % mod;
            }
            /**
             * $n*2^{n-1}n∗2 
                n−1
                 $
                要求2^n - 1,O(logN)复杂度,经典的快速幂算法。
                2*n-1= n*n-1 ==> n*n/2
                2*n-1= n*n-1 ==> n/2*n/2
             */
        }
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            int x = n;
            System.out.println((binaryPow(n - 1) * n) % mod);
        }
    }

    题目2:

    一个地图n*m,包含1个起点,1个终点,其他点包括可达点和不可达点。 每一次可以:上下左右移动,或使用1点能量从(i,j)瞬间移动到(n-1-i, m-1-j),最多可以使用5点能量。

    数据范围:2 <= n,m <= 500;

    示例

    输入:

    4 4
    
    #S..
    
    E#..
    
    ....
    
    ....
    输出:
    4

    解释:S(0,1)先瞬移到(3, 2),然后往上一步,往右一步,瞬移到E,一共4

    思路: 就是简单的走迷宫BFS

    public class BFS {
        static int n = 0;
        static int m = 0;
        static char map[][] = new char[100][100];
        static int ex;
        static int ey;
        static int X[] = new int[] { 0, 0, 1, -1 };
        static int Y[] = new int[] { 1, -1, 0, 0 };
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            n = in.nextInt();
            m = in.nextInt();
            for (int i = 0; i < n; i++) {
                map[i] = in.next().toCharArray();
            }
            Queue<Node> queue = new LinkedList<Node>();
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    if (map[i][j] == 'S') {
                        Node startnode = new Node(i, j);
                        queue.add(startnode);
                        System.out.print(i + " => ");
                        System.out.println(j);
                        map[i][j] = 'X';
                    }
                    if (map[i][j] == 'E') {
                        ex = i;
                        ey = j;
                        System.out.print(i + " => ");
                        System.out.println(j);
                    }
                }
            }
            new BFS().bfs(queue);
        }
    
        private void bfs(Queue<Node> queue) {
            while (!queue.isEmpty()) {
                int size = queue.size();
                while (size-- > 0) {
                    Node topnode = queue.poll();
                    if (topnode.x == ex && topnode.y == ey) {
                        System.out.println(topnode.step);
                        return;
                    }
                    for (int i = 0; i < 4; i++) {
                        int curx = topnode.x + X[i];
                        int cury = topnode.y + Y[i];
                        if (check(curx, cury)) {
                            Node newnode = new Node(curx, cury);
                            newnode.step = topnode.step + 1;
                            queue.add(newnode);
                            map[curx][cury] = 'X';
                        }
                    }
                    // (n-1-i, m-1-j),
                    int flyx = n - 1 - topnode.x;
                    int flyy = m - 1 - topnode.y;
                    if (check(flyx, flyy) && topnode.fly < 5) {
                        Node flynode = new Node(flyx, flyy);
                        flynode.step = topnode.step + 1;
                        flynode.fly = topnode.fly + 1;
                        queue.add(flynode);
                        map[flyx][flyy] = 'X';
                    }
                }
            }
        }
    
        private boolean check(int curx, int cury) {
            if (curx < 0 || curx >= n || cury < 0 || cury >= m)
                return false;
            if ((map[curx][cury] != '.' && map[curx][cury] != 'E'))
                return false;
            return true;
        }
    }
    
    class Node {
        int x;
        int y;
        int step;
        int fly;
    
        public Node(int x, int y) {
            super();
            this.x = x;
            this.y = y;
        }
    }
  • 相关阅读:
    Thread的第四天学习
    Thread的第三天学习
    Thread的第二天学习
    Thread的第一天学习
    hibernate的简单学习(第一天)
    【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .
    MySql学习
    sqlserver 数据库隔离级别,数据库死锁
    高并发操作同一条数据,更新丢失数据问题(重复转账,票超卖,订单扣库存问题)
    T4
  • 原文地址:https://www.cnblogs.com/dgwblog/p/12566704.html
Copyright © 2011-2022 走看看