摘自傳智播客公開課
package test; /* * 傳智播客公開課筆記 */ public class Arithmetic { public static void main(String[] args) { /* 題設:現有0到99,共計100個整數,各不相同,將所有數放入一個 數組,隨機排布。數組長度101,多餘的數字是0到99其中任 意一個數(唯一重複的數字) 問題:將這個重複的數字找出來 */ /* * 構造題目 */ int[] num = new int[101]; for(int i=0;i<num.length;i++) { num[i] = i; } num[100] = 55; for(int i=0;i<10000;i++) { int num1 = (int)(Math.random()*101); int num2 = (int)(Math.random()*101); int temp; temp = num[num1]; num[num1] = num[num2]; num[num2] = temp; } //題目測試 for(int i = 0;i<num.length;i++) { System.out.print(num[i] + "\t"); if((i+1)%10==0) System.out.println(); } //問題解決 /* * 方案一 */ feng: for(int i = 0;i<num.length;i++) { for(int j = i+1;j<num.length;j++) { if(num[j]==num[i]) { System.out.println("\n" + "方案一找出來的數字爲:" + num[i]); break feng; } } } //缺點:隨着基數的增大,計算次數可能會成倍增大 /* * 方案二 */ int sum = 0; for(int i=0;i<num.length;i++) { sum += num[i]; } for(int i=0;i<100;i++) { sum -= i; } System.out.println("\n" + "方案二找出來的數字爲:" + sum); //缺點:如果計算的數字特別多,比如有3萬億個數據,超出了數據類型 /* * 方案三 */ int test = num[0]; for(int i=1;i<num.length;i++) { test = test^num[i]; } for(int i=0;i<100;i++) { test = test^i; } System.out.println("\n" + "方案三找出來的數字爲:" + test); } }