阿里2018秋招模拟笔试Java研发岗试题

标签: 阿里
3876人阅读 评论(0) 收藏 举报
分类:

如何在MarkDown中添加公式

引用块内容![公式名]`(http://latex.codecogs.com/png.latex?这里输入您的公式)

选择题

1.一个抽奖游戏,有7个连续整数的球(比如1,2,3,4,5,6,7),连续随机抽取3个,如果连续抽取的两个球是连续的,则中奖,问中奖几率多大?

结果 11/21

数学方法
因为连续抽取三个数,如果连续抽取的两个是连续的则中奖分为两种情况
思路先组合在排列
①三个数直接连续 如123 本身又有6种变化 ,又因连续有5种 5*6=30种

排列组合
②有且只有两个数是连续 如 12 4 本身有4种变化 所以为 20*4=80种

因为取三个数所以边上两个是特殊的所以为
排列组合=80
共计110种

总结:如果连续抽取三个那么边上两个就是特殊情况需要区别对待,如果抽取4个那么边上三个要区别对待,在判断连续情况要分情况讨论,如果连续两个,但是抽取三个会出现连续三个和连续两个的情况。那么抽取N个呢,连续M个呢,那么有 M到N共 (N-M)种情况需要区别对待。

规律及推导

假设题变化成共有X个连续的小球,连续抽取N个小球,如果连续抽取的2个小球是连续的,则中奖,问:中奖概率是多少(其中X>=N)

排列总数为排列组合

符合条件的:
需要计算 两个小球连续,….到N个小球连续的情况和
边上特殊 其余普通对待,在特殊对待连续的

程序写下遍历方法和结果

    public void printArray(int[] array) {
        //因为不知道有几个
        //先遍历数组
        int time = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                for (int k = 0; k < array.length; k++) {
                    if (array[i] != array[k] && array[j] != array[k] && array[i] != array[j]) {
                        System.out.println(array[i] + "," + array[j] + "," + array[k]);
                        time++;
                    }
                }
            }
        }
        //time为计算有多少种
        int[][] rank = new int[time][3];
        time = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                for (int k = 0; k < array.length; k++) {
                    if (array[i] != array[k] && array[j] != array[k] && array[i] != array[j]) {
                        rank[time][0] = array[i];
                        rank[time][1] = array[j];
                        rank[time][2] = array[k];
                        time++;
                    }
                }
            }
        }
        System.out.println("共计" + time + "种情况");
        //上面为二次遍历赋值


        System.out.println("现在输出符合连续的情况");
        time=0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                for (int k = 0; k < array.length; k++) {
                    if (array[i] != array[k] && array[j] != array[k] && array[i] != array[j]) {
                        if(Math.abs(array[i]-array[j])==1||Math.abs(array[j]-array[k])==1){
                            System.out.println(array[i] + "," + array[j] + "," + array[k]);
                            time++;
                        }

                    }
                }
            }
        }
        System.out.println("共计" + time + "种情况");
        //下面是判断
    }

    @Test
    public void Test() {
        int[] array = {1, 2, 3, 4, 5, 6, 7};
        printArray(array);
    }

1,2,3
1,2,4
1,2,5
1,2,6
1,2,7
1,3,2
1,3,4
1,3,5
1,3,6
1,3,7
1,4,2
1,4,3
1,4,5
1,4,6
1,4,7
1,5,2
1,5,3
1,5,4
1,5,6
1,5,7
1,6,2
1,6,3
1,6,4
1,6,5
1,6,7
1,7,2
1,7,3
1,7,4
1,7,5
1,7,6
2,1,3
2,1,4
2,1,5
2,1,6
2,1,7
2,3,1
2,3,4
2,3,5
2,3,6
2,3,7
2,4,1
2,4,3
2,4,5
2,4,6
2,4,7
2,5,1
2,5,3
2,5,4
2,5,6
2,5,7
2,6,1
2,6,3
2,6,4
2,6,5
2,6,7
2,7,1
2,7,3
2,7,4
2,7,5
2,7,6
3,1,2
3,1,4
3,1,5
3,1,6
3,1,7
3,2,1
3,2,4
3,2,5
3,2,6
3,2,7
3,4,1
3,4,2
3,4,5
3,4,6
3,4,7
3,5,1
3,5,2
3,5,4
3,5,6
3,5,7
3,6,1
3,6,2
3,6,4
3,6,5
3,6,7
3,7,1
3,7,2
3,7,4
3,7,5
3,7,6
4,1,2
4,1,3
4,1,5
4,1,6
4,1,7
4,2,1
4,2,3
4,2,5
4,2,6
4,2,7
4,3,1
4,3,2
4,3,5
4,3,6
4,3,7
4,5,1
4,5,2
4,5,3
4,5,6
4,5,7
4,6,1
4,6,2
4,6,3
4,6,5
4,6,7
4,7,1
4,7,2
4,7,3
4,7,5
4,7,6
5,1,2
5,1,3
5,1,4
5,1,6
5,1,7
5,2,1
5,2,3
5,2,4
5,2,6
5,2,7
5,3,1
5,3,2
5,3,4
5,3,6
5,3,7
5,4,1
5,4,2
5,4,3
5,4,6
5,4,7
5,6,1
5,6,2
5,6,3
5,6,4
5,6,7
5,7,1
5,7,2
5,7,3
5,7,4
5,7,6
6,1,2
6,1,3
6,1,4
6,1,5
6,1,7
6,2,1
6,2,3
6,2,4
6,2,5
6,2,7
6,3,1
6,3,2
6,3,4
6,3,5
6,3,7
6,4,1
6,4,2
6,4,3
6,4,5
6,4,7
6,5,1
6,5,2
6,5,3
6,5,4
6,5,7
6,7,1
6,7,2
6,7,3
6,7,4
6,7,5
7,1,2
7,1,3
7,1,4
7,1,5
7,1,6
7,2,1
7,2,3
7,2,4
7,2,5
7,2,6
7,3,1
7,3,2
7,3,4
7,3,5
7,3,6
7,4,1
7,4,2
7,4,3
7,4,5
7,4,6
7,5,1
7,5,2
7,5,3
7,5,4
7,5,6
7,6,1
7,6,2
7,6,3
7,6,4
7,6,5
共计210种情况
现在输出符合连续的情况
1,2,3
1,2,4
1,2,5
1,2,6
1,2,7
1,3,2
1,3,4
1,4,3
1,4,5
1,5,4
1,5,6
1,6,5
1,6,7
1,7,6
2,1,3
2,1,4
2,1,5
2,1,6
2,1,7
2,3,1
2,3,4
2,3,5
2,3,6
2,3,7
2,4,3
2,4,5
2,5,4
2,5,6
2,6,5
2,6,7
2,7,6
3,1,2
3,2,1
3,2,4
3,2,5
3,2,6
3,2,7
3,4,1
3,4,2
3,4,5
3,4,6
3,4,7
3,5,4
3,5,6
3,6,5
3,6,7
3,7,6
4,1,2
4,2,1
4,2,3
4,3,1
4,3,2
4,3,5
4,3,6
4,3,7
4,5,1
4,5,2
4,5,3
4,5,6
4,5,7
4,6,5
4,6,7
4,7,6
5,1,2
5,2,1
5,2,3
5,3,2
5,3,4
5,4,1
5,4,2
5,4,3
5,4,6
5,4,7
5,6,1
5,6,2
5,6,3
5,6,4
5,6,7
5,7,6
6,1,2
6,2,1
6,2,3
6,3,2
6,3,4
6,4,3
6,4,5
6,5,1
6,5,2
6,5,3
6,5,4
6,5,7
6,7,1
6,7,2
6,7,3
6,7,4
6,7,5
7,1,2
7,2,1
7,2,3
7,3,2
7,3,4
7,4,3
7,4,5
7,5,4
7,5,6
7,6,1
7,6,2
7,6,3
7,6,4
7,6,5
共计110种情况

7个球中取三个是C10

2.设一个关系为R(A,B,C,D,E,F,G),他的最小函数依赖是FD={A->B,A->C,C->D,C->E,A->F,F->G},该关系满足_范式,若要规划为高一级的范式,则得到_个关系。

答:该关系满足第二范式,规划为高一级,则得到3个关系 分别为 1.A,B,C,F 2.C,D,E 3.F,G
数据库相关

编程题

3.小猴子下山,沿着下山的路有一排桃树,每棵树都结了一些桃子。小猴子想摘桃子,但是有一些条件需要遵守,小猴子只能沿着下 山的方向走,不能回头,每颗树最多摘一个,而且一旦摘了一棵树的桃子,就不能再摘比这棵树结的桃子少的树上的桃子。那么小 猴子最多能摘到几颗桃子呢?举例说明,比如有5棵树,分别结了10,4,5,12,8颗桃子,那么小猴子最多能摘3颗桃子,来 自于结了4,5,8颗桃子的桃树。

/** 请完成下面这个函数,实现题目要求的功能 **/
        /** 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^ **/


        static int pick(int[] peaches) {

        }
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            int trees = Integer.parseInt(in.nextLine().trim());
            int[] peaches = new int[trees];
            for (int i = 0; i < peaches.length; i++) {
                peaches[i] = Integer.parseInt(in.nextLine().trim());
            }
            System.out.println(pick(peaches));
        }

解法,题目也可以意为剑指offer和编程之美中的最长递增子数列
思路:
用一个数组进行标记当前能得到多少个
假设共有n个值,其前(n-1)的可摘数已经算出
那么第n个的值为
如果当前值大于n-1的值,则当前为 n-1的值+1
不满足递推,全部不满足初始化为0;

  static int pick(int[] peaches) {
            //定义动态规划数组,与原数组大小相同
            int[] status=new int[peaches.length];


            for (int i = 0; i <peaches.length ; i++) {
                status[i]=1;
                for (int j = i-1; j >=0; j--) {
                    if (peaches[i]>peaches[j]&&(status[j]+1)>status[i]){
                        status[i]=status[j]+1;
                    }
                }
            }
            int Max=status[0];
            for (int i = 1; i < status.length; i++) {
                if (status[i]>Max){
                    Max=status[i];
                }
            }
            return Max;
        }
查看评论

2018阿里秋招在线编程题(Java开发工程师)

题目:小猴子下山,沿着下山的路有一排桃树,每棵树都结了一些桃子。小猴子想摘桃子,但是又一些条件需要遵守,小瘦子只能沿着下山的方向走,不能回头,每棵树最多摘一个,而且一旦摘了一棵树的桃子,就不能再摘比这...
  • Spicyfish
  • Spicyfish
  • 2017-07-24 12:27:36
  • 5556

Java面试2018常考题目汇总(一)

java程序员面试必看!
  • hope900
  • hope900
  • 2017-12-09 15:12:00
  • 18538

2018年java技术面试题整理

1、servlet执行流程客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request、respo...
  • qq_35661171
  • qq_35661171
  • 2018-02-13 09:09:09
  • 5803

Java面试题汇总与解答

2018最新Java面试题整理(持续完善中…) 声明:面试题(无参考答案)收集自公众号服务端思维,本人抱着学习的态度网上找了下参考答案,有不足的地方还请指正,谢谢~ 2018最新Jav...
  • u010697681
  • u010697681
  • 2018-03-01 16:20:17
  • 6422

2018年JAVA基础面试题和高级面试题总结

Java面试前需要做足各方面的准备工作,肯定都会浏览大量的面试题,本人也不例外,通过浏览面试题和以往的面试经历,总结了从初级到中级以及高级的面试题,供大家学习讨论。 Java面试高级篇—Java N...
  • afreon
  • afreon
  • 2018-03-11 19:28:00
  • 1479

2018届秋季校招Java面试题总结(一)

2018届秋季校招考试题总结系列是在 本菜 面挂一万场后记下的面试题。记下以供闲暇学习之。 1. 简单描述一下Zookeeper 答:Zookeeper是一种为分布式应用所设计的高可用性、高性能且...
  • Juwenzhe_HEBUT
  • Juwenzhe_HEBUT
  • 2017-10-25 09:02:05
  • 3184

2018java基础面试题(我自己用的,面试好多家公司基本会问到的问题和技术)

1,webservice是什么?webservice是一种跨编程语言和跨操作系统的远程调用技术,遵循SOPA/WSDL规范。2,springCloud是什么?springcloud是一个微服务框架,并...
  • u013305864
  • u013305864
  • 2018-03-01 09:51:35
  • 1762

2018 年,去百度面试 Java 后端的一次面试经历

一,百度一面: 1、给一个函数,返回 0 和 1,概率为 p 和 1-p,请你实现一个函数,使得返回 01 概率一样。 2、10 亿个 url,每个 url 大小小于 56B,要求去重,内存 4G。 ...
  • B9Q8e64lO6mm
  • B9Q8e64lO6mm
  • 2018-01-27 07:02:33
  • 1876

2018java面试题

  • 2018年01月30日 10:22
  • 35.69MB
  • 下载

2018 java面试题

新年回来3月份,正值跳槽季,面了几家公司,问的问题大部分从项目开始逐渐问,其他的能记住的问的问题就这些了,记录下以后想起来再更新。1.String 是可变的吗? 还知道哪些不可变的类?2.Servle...
  • WangJQ12
  • WangJQ12
  • 2018-03-15 10:31:26
  • 345
    个人资料
    持之以恒
    等级:
    访问量: 16万+
    积分: 3680
    排名: 1万+
    博客专栏