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