一道隨機演算法的研究!

來源:互聯網
上載者:User

        朋友問我一個問題:“隨機出來1~100中的10個數字,不能有任何重複的數字出現,但是要求不能每次對隨機出的數進行驗證”,要是沒有最後一個要求那就很簡單了,不能對每次隨機的數字進行驗證,這就是說要一次隨機出來的數字就是唯一的,這也就是說下一次隨機的數組中就不能有已經輸出的數字了,呵呵,想到一個辦法,
        1、把你最終的結果預先放在一個數組中;
  2、random產生一個隨機下標,我們取出對應的數組中的值;
        3、然後用數組最後一個值替換下標數組中的值;
        4、將產生隨機下標的範圍逐個減少1;
    public   class   MyRandom1{
                private static  Random random=new  Random();
                public  static  void main(String[ ] args ){
                int NUM=100;
                int cont[ ]=new int[NUM];
                for (int i=1;i<NUM;i++){
                      cont[i]=1;
                } 
               for(int j=0;j<NUM;j++){
                 int index=random.nextInt(100);
                 System.out.println("The random number is :"+cont[index]);
                 cont[index]=cont[NUM-1-j];
                }
            }

};
    這個不是很好的演算法就解決了這個問題,由於數字很少,使用一個簡單的數組就能解決問題了,隨之而來,我找個了一個很好的題目:
        某單位要設計一個考核,題庫裡總共有100道題目,其中30道選擇題,30道填空題,20道問答題,20道論敘題;每次出題採用的是考生自己選擇考核時間然後電腦隨機出題,每次出20道選擇題,20道填空題,10道問答題,10道論敘題,每張試卷出題不能有重複,確定考核開始,開始時間倒記時,考核時間可以由考核人員確定,距離結束時間5分鐘出現對話方塊時提示考生,還有30秒時出現聲音提示,時間到了準時自動交卷;
      這個到記時以及出現對話方塊的設計都很簡單,重點他也有個要求,就是和上面的要求一樣,不要驗證,並且不能模仿上面的演算法,暈,存心刁難...........

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.