阿里2017暑期实习生招聘技术岗编程题2--java实现

来源:互联网 发布:淘宝店智能版 编辑:程序博客网 时间:2024/05/17 00:12

一、问题描述:

小张五一回家,父母给他安排了很多个相亲的姑娘,设姑娘的人数为N。

父亲负责安排约会,每次随机选择一个要相亲的对象, 母亲负责记录哪些姑娘已经约会过了。直到和所有的姑娘都约会完一遍以后,相亲才会结束。

这些天父母在吵架, 他们之间不会有任何言语沟通。所以父亲不知道那些姑娘已经约会过了。因此下次约会的对象很可能是以前已经约会过的。

请问,如果小张要把所有的姑娘都约会一遍, 那么平均需要约会多少个姑娘。

二、要求

输入:
共1行,给出N的值,正整数。

输出:
共一行,即平均约会次数,保留4位小数。

输入范例:
100

输出范例:
512.0000

三、解决

编程语言: java

思路:

N个女孩,序号为1~N,建立一个长度为N的数组,代表女孩的约会状态,0代表未和小张约过会,1代表已和小张约过会,将数组元素的初始值设为0。

设置一个变量记录约会次数。

每次随机生成一个1~N之间的数m,代表即将和序号为m的女孩约会,然后将该女孩的约会状态由0设为1;
然后对所有女孩的状态属性进行求和操作,若和为N,说明,小张已经和所有女孩约过会了,记下此时的约会次数。

对上述操作循环100次,然后根据每次循环下小张的约会次数,求取均值,即看作题目的答案。

package test;import java.awt.Point;import java.io.*;import java.util.Scanner;public class DateWithGirls {    /**     * @param args     * @throws IOException      */    public static void main(String[] args) throws IOException {        // TODO Auto-generated method stub        Scanner scanner = new Scanner(System.in);        //用来接受控制台输入的女孩个数N        int N=0;        while(scanner.hasNext()){            N = scanner.nextInt();            int[] statusOfGirls= new int[N];            //设置实验次数.            int times = 100;            //这个数组存储每次实验记录的约会次数            int[] allCount = new int[times];            //开始实验            for(int t=0;t<times;t++){                int count = 0;//计算约会次数                int sum = 0;//对所有女孩的约会状态进行求和                //设置女孩初始约会状态为0.                for(int k=0;k<m;k++){                    statusOfGirls[k] = 0;                }                boolean isContinue = true;                while(isContinue){                    sum = 0;                    //随机生成要约会的女孩.                    int ss = (int)Math.floor(Math.random()*m);                    count+=1;//约会次数加1                    //设置该女孩的约会状态为1.                    statusOfGirls[ss] = 1;                    //加总女孩的约会状态.                    for(int j=0;j<m;j++){                        sum+=statusOfGirls[j];                    }                    if(sum==m){                        //如果所有女孩的约会状态都为1则终止循环                        isContinue = false;                    }                    //System.out.println(ss);                }                allCount[t] = count;//将约会次数存入数组            }            int totalCount=0;            for(int j=0;j<times;j++){                totalCount+=allCount[j];            }            double meanCount = totalCount/times;            System.out.printf("%.4f",meanCount);//格式化输出.        }    }   }
1 0
原创粉丝点击