关闭

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

标签: 阿里
3257人阅读 评论(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;
        }
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

阿里笔试题(2015)持续更新中

第一次做阿里笔试题,除了ACM题之外从来没有做过校招网络题呀,完全是裸考,总体感觉吧,对于我来说,感觉时间不够用,不是题不会,感觉时间紧,大脑很混乱,总结这一次的笔试题 废话不多说,直接上题和答案 ...
  • lv836735240
  • lv836735240
  • 2014-08-30 02:16
  • 39862

Java岗位面试经验,百度,阿里,CVTE(转载)

早上11点,刚刚收到阿里的offer,也算是给自己三个月的春招画上了一个还算圆满的句号。 上图证明一下(阿里巴巴offer截图) 先介绍一下本人的基本情况:陕西普通一本非计算机专业...
  • yuxin6866
  • yuxin6866
  • 2016-09-18 14:08
  • 1676

20160909阿里校招数据研发工程师笔试总结

9.9晚上有幸参加了阿里的数据研发工程师在线笔试,开阔了我的视野,也给我一个很大的提醒,学艺不精,权当是一次学习了吧。不管怎么样,非常感谢该团队。因考试要求不可泄露相关信息,故在此只能将题目的大致要求...
  • hjnth
  • hjnth
  • 2016-09-11 15:42
  • 2138

阿里巴巴2015年秋招-测试开发工程师的在线笔试试题图片版

  • 2014-08-29 22:12
  • 674KB
  • 下载

2015年秋季阿里巴巴在线笔试——Java研发师——部分试题分析

d 分析: 从A到B总共12步,向上可以走5步,向右可以走7步。注意,必须向上走5步,向右走7步。 排除从A到P的C3,4.(就是排列组合那个符号),和从P到B的C2,8。共有 C5,12 -C...
  • uniquewonderq
  • uniquewonderq
  • 2015-09-03 17:43
  • 628

阿里巴巴2018校招笔试题

前几天做了阿里的2018的校招笔试题,我投的岗位是Java研发,在这里跟大家分享下笔试题及我的解法。1、 题目 由于当时时间比较紧,只有四十分钟,但是题目也只有一道,可能我比较渣,所以时间很赶,没来...
  • liu_005
  • liu_005
  • 2017-07-10 07:54
  • 3198

2016年阿里校招笔试题(JAVA研发岗)

一、单项选择题 1. A、B、C三个同学头上分别有三个数字a、b、c,他们看不到自己头上的数字,但可以看到其他两人的。比如B同学能看到a、c,但看不到b。已知1,并且各不相等。A、B、C三个人以此进...
  • xiaoquantouer
  • xiaoquantouer
  • 2016-09-17 15:46
  • 4865

阿里巴巴 java笔试 试题 有两份

  • 2010-04-16 17:33
  • 16KB
  • 下载

华为2018校招软件开发岗笔试题

  • 2017-11-10 14:59
  • 10.68MB
  • 下载

阿里巴巴20121009 研发/算法工程师 笔试试题

http://blog.csdn.net/twtsa/article/details/8055143 第19题 a[i]在排序后的位置是[i-k, i+k],a[i+2k]在排序后的位置...
  • logarrow
  • logarrow
  • 2013-09-21 18:07
  • 982