欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

明明的随机数

程序员文章站 2022-04-04 20:13:43
...

Description

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

Input

包含多组测试数据,每组测试数据占2行。

第1行为1个正整数,表示所生成的随机数的个数:N

第2行有N个用空格隔开的正整数,为所产生的随机数。

Output

每组测试数据占2行。

第1行为1个正整数M,表示不相同的随机数的个数。

第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

Sample Input

10

20 40 32 67 40 20 89 300 400 15

Sample Output

8

15 20 32 40 67 89 300 400

  1. 第一种(最笨的思路,时间复杂度高)
import java.util.Scanner;
public class homework {
 public static void Random(){//自己写的思路,效率低,时间复杂度高
  Scanner sc=new Scanner(System.in);
  System.out.println("input:");
  int n=sc.nextInt();
  int radom[]=new int[100];
  int count=0;
  for(int i=0;i<n;i++){
   radom[i]=(int)(1+Math.random()*1000);//生成了N个1到1000之间的随机整数
   System.out.print(radom[i]+" ");
   }
   System.out.println(" ");
  for(int j=0;j<n;j++){//去重
   int key=radom[j];
   for(int k=j+1;k<n;k++){
    if(key==radom[k]){
     radom[k]=0;
     }
   }
   if(radom[j]!=0)
    count++;
  }
  for(int j=0;j<n;j++){//选择排序
   int min=j;
   int temp;
   for(int k=j+1;k<n;k++){
    if(radom[min]>radom[k]){
     min=k;
    }
   }
   temp=radom[j];
   radom[j]=radom[min];
   radom[min]=temp;
  }
  System.out.println(count);
  for(int i=0;i<n;i++){  
   if(radom[i]!=0)
    System.out.print(radom[i]+" ");
   }
 }
 public static void main(String[] args){
  Wrandom();
  }
}

运行截图:
明明的随机数
2.第二种(巧妙地利用了数组的特性,时间复杂度低,但是是空间换时间,所以当数组过大,不建议使用)

import java.util.Scanner;
public class homework {
public static void Wrandom(){//定义一个1001长度的数组,每次把生成的值放到对应下标的位置,只能放一次,数组本就是顺序的,所以最后肯定是去重和顺序的,但不适合数组太大的,浪费空间
  int radom[]=new int[1001];
  int count=0;
  Scanner sc=new Scanner(System.in);
  System.out.println("input:");
  int n=sc.nextInt();
  for(int i=0;i<n;i++){//将随机生成的数字保存到对应的数组下标里面
   int temp=(int)(1+Math.random()*1000);
   System.out.print(temp+" ");
   if(radom[temp]==0){
    count++;
   }
   radom[temp]=temp;
  }
  System.out.println("");
  System.out.println(count);
  for(int i=1;i<1001;i++){  //输出的结果为去重和排序的
   if(radom[i]!=0)
    System.out.print(radom[i]+" ");
   }  
 }
 public static void main(String[] args){
 	Wrandom();
  }
}

运行截图:
明明的随机数你学会了哪种呢,加油哦!