【牛客-华为机试】HJ3 明明的随机数

69 阅读2分钟

题目 HJ3 明明的随机数

  • 描述

    明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。

    数据范围: 1≤n≤1000  ,输入的数字大小满足  1≤val≤500 

    • 输入描述: 第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。

    • 输出描述: 输出多行,表示输入数据处理后的结果。

  • 示例1

输入:3
      2
      2
      1
输出:1
      2  
说明:输入解释:
      第一个数字是3,也即这个小样例的N=3,说明用计算机生成了31500之间的随机整数,接下来每行一个随机数字,共3行,也即这3个随机数字为:
      2
      2
      1
      所以样例的输出为:
      1
      2

解题办法

  • 解析

    • 审题:重点在去重排序,而且是升序

    • 首先是去重:

      • set()中的值是唯一的,刚好可以把去重后的新数放入set
      • 定义一个set创建一个新的构造函数
      • 用for遍历数字,循环处理每个输入的数字num,然后将num加到set
    • 然后是排序:

      • sort()可以用来给数组原地排序,带上a,b两个元素就可以进行比较了
      • 先用 Array.fromset转换成数组
      • 后用a,b的位置来升序
      • 最后for循环遍历这个数组并输出结果
  • 代码展示

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
  let n = parseInt(await readline());// 读取输入数量 n
  let set = new Set(); // 存储不重复的数字(使用 Set 类型)
  
  for (let i = 0; i < n; i++) {// 循环处理每个输入的数字
    let num = parseInt(await readline());
    set.add(num);
  }
  // 将不重复的数字升序排序
  let arr = Array.from(set).sort((a, b) => a - b);
 
  for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
  }
}()