匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 1 0 年前

程式設計的闆題

各位大大好,我想請問一個問題就是如何利用JAVA設計產生二十個正整數,範圍從100 到1000,裡面的數字都沒有重複到,因為我對math.random不是很熟,謝謝。

已更新項目:

還有兩個問題想請問就是:一、找到用任何程式語言實現的Quicksort程式,應用於以上程式的輸出,並手動追蹤其中所有變數。二、估算此Quicksort程式執行的步驟與輸入陣列長度的關係。

此外,我很感謝北極狐大大和ωετμοφντ 大大,兩位大大都是運用不同的方法來執行,北極狐你用的是宣告陣列和for迴圈,而ωετμοφντ 則是用到while迴圈和break敘述,兩位的方法我試過後都可行,不知道點數該給哪位才好。

5 個解答

評分
  • 1 0 年前
    最佳解答

    請參考我的做法

    public class Y3320 { public static void main(String[] args) { int count = 0; int[] ary = new int[20]; while (count < 20) { while (true) { boolean repeat = false; int x = (int)(Math.random() * 901 + 100); for (int i = 0; i < count; i++) { if (ary[i] == x) { repeat = true; break; } } if (!repeat) { ary[count++] = x; break; } } } System.out.println(java.util.Arrays.toString(ary)); }}

  • 1 0 年前

    贊成~

  • 1 0 年前

    1. 優劣不是程式拿去執行就算了, 要去檢查別人的解題思路, 這樣才知道分數要怎麼給, 如果自己判斷不出來, 可以交付投票.

    2. 建議問題不要一直Append下去, Q1生出 Q2,Q3 , 如果覺得有必要關聯可以一次提出, 或者分開版面.

    3. 所以問題既然已解決可以盡早給分了, 或者交付投票.

  • 1 0 年前

    北極狐的答案潛伏一顆小地雷:

    int[] arr=new int[901] 陣列的索引為 0~900,

    但在洗牌過程中的 (int) Math.random()*902 卻有可能產生 901

    在將它套至陣列時,便會出亂子!

    雖不會在每次執行都引爆,但總有引爆的機率!

    相信版大的頭應比較不痛了吧!不再不好抉擇了吧!

    2008-11-08 21:39:49 補充:

    同樣是刀,有的用來宰牛,有的用來殺雞,各適其所。

    若是在 N 個範圍內產生 N 個不重複的亂數,當然以洗牌法為優。

    但本例是在 901 個範圍內產生 20 個不重複的亂數,「重複」的機率是20/901,相對很低,洗牌法便不是很恰當了,況且洗牌法平白多浪費了801個整數空間,另還附贈一個地雷。

    優劣立判,何需交付投票!版大應可輕易抉擇!

  • 您覺得這個回答如何?您可以登入為回答投票。
  • Aiolus
    Lv 5
    1 0 年前

    public static void main(String args[]){

    int[] arr=new int[901];//100~1000共901個數

    for(int i=0;i<901;i++)

    arr[i]=i+100;

    //洗前20項

    for(int i=0;i<20;i++){

    int tmp=arr[i];

    int j=(int) (Math.random()*902);//0≦j<902

    arr[i]=arr[j];

    arr[j]=tmp;

    }

    //輸出20項

    for(int i=0;i<20;i++){

    System.out.println(arr[i]);

    }

    }

    2008-11-08 20:10:02 補充:

    ㄎ 沒注意=_=

還有問題?馬上發問,尋求解答。