【NOIP普及组】明明的随机数

【NOIP普及组】明明的随机数

|-----------------------------|
| 💐The Begin💐点点关注,收藏不迷路💐 |

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

输入

输入2行,第1行为1个正整数,表示所生成的随机数的个数N,第2行有N个用空格隔开的正整数,为所产生的随机数。

输出

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

样例输入

java 复制代码
10
20 40 32 67 40 20 89 300 400 15

样例输出

java 复制代码
8
15 20 32 40 67 89 300 400

C语言实现

c 复制代码
#include <stdio.h>
#include <stdlib.h>

#define MAX_N 100

// 比较函数,用于qsort
int compare(const void * a, const void * b) {
    return ( *(int*)a - *(int*)b );
}

int main() {
    int n;
    int numbers[MAX_N];
    int unique_numbers[MAX_N];

    // 读取随机数的个数N
    scanf("%d", &n);

    // 读取N个随机数
    for (int i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    int unique_count = 0;

    // 遍历所有随机数,进行去重操作
    for (int i = 0; i < n; i++) {
        int is_duplicate = 0;
        for (int j = 0; j < unique_count; j++) {
            if (numbers[i] == unique_numbers[j]) {
                is_duplicate = 1;
                break;
            }
        }
        if (!is_duplicate) {
            unique_numbers[unique_count] = numbers[i];
            unique_count++;
        }
    }

    // 对去重后的数组进行排序
    qsort(unique_numbers, unique_count, sizeof(int), compare);

    // 输出不相同的随机数的个数
    printf("%d\n", unique_count);

    // 输出排好序的不相同的随机数
    for (int i = 0; i < unique_count; i++) {
        printf("%d ", unique_numbers[i]);
    }
    printf("\n");

    return 0;
}

C++实现

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    int n;
    std::vector<int> numbers;
    std::vector<int> unique_numbers;

    // 读取随机数的个数N
    std::cin >> n;

    // 读取N个随机数并存入vector
    for (int i = 0; i < n; ++i) {
        int num;
        std::cin >> num;
        numbers.push_back(num);
    }

    int unique_count = 0;

    // 遍历所有随机数,进行去重操作
    for (int num : numbers) {
        if (std::find(unique_numbers.begin(), unique_numbers.end(), num) == unique_numbers.end()) {
            unique_numbers.push_back(num);
            unique_count++;
        }
    }

    // 对去重后的vector进行排序
    std::sort(unique_numbers.begin(), unique_numbers.end());

    // 输出不相同的随机数的个数
    std::cout << unique_count << std::endl;

    // 输出排好序的不相同的随机数
    for (int num : unique_numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Java实现

java 复制代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();

        int[] numbers = new int[n];

        // 读取N个随机数
        for (int i = 0; i < n; i++) {
            numbers[i] = scanner.nextInt();
        }

        // 使用HashSet进行去重
        HashSet<Integer> uniqueSet = new HashSet<>();
        for (int num : numbers) {
            uniqueSet.add(num);
        }

        // 将HashSet中的元素转换为数组以便排序
        Integer[] uniqueArray = uniqueSet.toArray(new Integer[0]);

        // 对去重后的数组进行排序
        Arrays.sort(uniqueArray);

        // 输出不相同的随机数的个数
        System.out.println(uniqueArray.length);

        // 输出排好序的不相同的随机数
        for (int num : uniqueArray) {
            System.out.print(num + " ");
        }
        System.out.println();

        scanner.close();
    }
}

Python实现

python 复制代码
n = int(input())

# 读取N个随机数
numbers = list(map(int, input().split()))

# 使用集合进行去重
unique_numbers = list(set(numbers))

# 对去重后的列表进行排序
unique_numbers.sort()

# 输出不相同的随机数的个数
print(len(unique_numbers))

# 输出排好序的不相同的随机数
print(" ".join(map(str, unique_numbers)))

|---------------------------|
| 💐The End💐点点关注,收藏不迷路💐 |

相关推荐
摇滚侠1 分钟前
面试实战 问题三十四 对称加密 和 非对称加密 spring 拦截器 spring 过滤器
java·spring·面试
xqqxqxxq2 分钟前
Java 集合框架之线性表(List)实现技术笔记
java·笔记·python
L0CK10 分钟前
RESTful风格解析
java
程序员小假19 分钟前
我们来说说 ThreadLocal 的原理,使用场景及内存泄漏问题
java·后端
何中应22 分钟前
LinkedHashMap使用
java·后端·缓存
tryxr29 分钟前
Java 多线程标志位的使用
java·开发语言·volatile·内存可见性·标志位
暗然而日章33 分钟前
C++基础:Stanford CS106L学习笔记 13 特殊成员函数(SMFs)
c++·笔记·学习
talenteddriver35 分钟前
java: Java8以后hashmap扩容后根据高位确定元素新位置
java·算法·哈希算法
云泽80837 分钟前
STL容器性能探秘:stack、queue、deque的实现与CPU缓存命中率优化
java·c++·缓存
yyy(十一月限定版)43 分钟前
c语言——栈和队列
java·开发语言·数据结构