阿里2017暑期實習生招聘技術崗編程題2--java實現

一、問題描述:

小張五一回家,父母給他安排了很多個相親的姑娘,設姑娘的人數爲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);//格式化輸出.

        }
    }   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章