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; } } } }
原文:http://rainday5.blog.51cto.com/6054509/1360386