算法題2

package test;
public class Arithmetic2 {
    public static void main(String[] args) {
        /*
        題設:現有0到99,共計100個整數,各不相同,將所有數放入一
            個數組,隨機排布。數組長度100,將其中任意一個數替換
            成0到99另一個數(唯一重複的數字)
        問題:將這個重複的數字找出來
        */
           
        /*
         * 構造題設
         */
        int[] num = new int[100];
        for(int i=0;i<num.length;i++) {
            num[i]=i;
        }
        for(int i=0;i<10000;i++) {
            int num1 = (int)(Math.random()*100);
            int num2 = (int)(Math.random()*100);
            int temp = num[num1];
            num[num1] = num[num2];
            num[num2] = temp;
        }
        int n1 = (int)(Math.random()*100);
        int n2 = (int)(Math.random()*100);
        System.out.println("n1位置的數爲:" + num[n1] + "\tn2位置的數爲:" + num[n2]);
        num[n2] = num[n1];
        System.out.println("n1換位後數爲:" + num[n1] + "\tn2換位後數爲:" + num[n2]);
           
        /*
         * 解決方案
         */
        //方案一
        int num1 = 0;
        feng:
        for(int i=0;i<num.length;i++) {
            for(int j=i+1;j<num.length;j++) {
                if(num[i]==num[j]) {
                    num1 = num[i];
                    break feng;
                }
            }
        }
        System.out.println("通過方案一找出來的重複數字爲:" + num1);
           
        //方案二
        int[] tempNum = new int[100];
        for(int i=0;i<num.length;i++) {
            if(tempNum[num[i]]==1) {
                System.out.println("通過方案二找出來的第一個數字爲:" + num[i]);
            }else {
                tempNum[num[i]] = 1;
            }
        }
           
        //方案三
        int[] tempNum2 = new int[100];
        for(int i=0;i<num.length;i++) {
            tempNum2[num[i]]++;
            if(tempNum2[num[i]] == 2) {
                System.out.println("通過方案三找出來的第一個數字爲:" + num[i]);
                break;
            }
        }
    }
}


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