好的。
- package test.test;
- import java.util.ArrayList;
- //已知一个数组int[98],该数组里面存储了0~99共100个数字中的98个,数字不重复,请用算法算出0~99中缺少的2个数字是哪两个?
- //要求:数组自己用程序生成,数值介于0~99,相互之间不重复。
- public class Test2 {
- public static void method() {
- //生成两个0-99随机数
- int[] i1 = new int[2];
- i1[0] = (int) (Math.random() * 100);
- while ((i1[1] = (int) (Math.random() * 99)) == i1[0])
- ;
- System.out.println("建立数组时缺少的数字 : ");
- for(int i:i1){
- System.out.print(i+",");
- }
- System.out.println();
-
- //生成不含有上述两个随机数的数组
- int[] i2 = new int[98];
- int counter = 0;
- for (int i = 0; i < 100; i++) {
- if(i!=i1[0]&&i!=i1[1]){
- i2[counter] = i;
- counter++;
- }
- }
- System.out.println("利用缺少的两个数,建立的数组 : ");
- for(int i:i2){
- System.out.print(i+",");
- }
- System.out.println();
-
- //找出不含有的两个数字
- //为了减少运算量,当找到数据中含有的数时就把他放到数组前面,下次遍历的时候略过前面已经找到的部分
- counter = 0;//用于记录已经找到数据的个数
- int temp;//用于找到的数,和前面数的交换
- boolean flag = false;//用于记录某个数据是否在数组中找到
- for(int i = 0; i < 100; i++){
- flag = false;
- for(int j=counter;j<98;j++){
- if(i2[j]==i){
- flag = true;
- temp = i2[counter];
- i2[counter] = i2[j];
- i2[j] = temp;
- counter++;
- break;
- }
- }
- if(!flag){
- System.out.println("找到的缺少数字 : "+i);
- }
- }
- }
- public static void main(String[] args) {
- method();
- }
- }
复制代码 |