ZeroJudge B130: 明明的隨機數

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了 N 個 1 到 1000 之間的隨機整數 (N ≤ 100),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應不同的學生的學號。然後再把這些數字從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成「去重」與「排序」的工作。

範例測資

範例輸入範例輸出
每組輸入有 2 行,第 1 行為 1 個正整數,表示所生成的随機數的個數:N
第 2 行有 N 個用空格隔開的正整數,為所產生的隨機數。
每組輸出也是 2 行,第 1 行為 1 個正整數 M,表示不相同的隨機數的個數。第 2 行為 M 個用空格隔開的正整數,為從小到大排好序的不相同的隨機數。
10
20 40 32 67 40 20 89 300 400 15
8
15 20 3 2 40 6 7 89 300 400

解題思路

可以使用 Map 來判斷該數有沒有出現過,如果有出現過的話就不要塞到 陣列/Vector 中,沒有出現過的話就塞到陣列裡並把 Map值+1。最後輸出陣列大小還有 Sort 之後的陣列幾可。

範例程式碼-ZeroJudge B130: 明明的隨機數

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    vector<int>num;
    map<int, int>MAP;
    for (int i = 0; i<N; i++)
    {
        int tmp;
        cin >> tmp;
        if (MAP[tmp] == 0) num.push_back(tmp);
        MAP[tmp]++;
    }
    sort(num.begin(), num.end());
    int size = int(num.size());
    cout << size << "\n";
    for (int i = 0; i<size; i++)
    {
        cout << num[i] << " ";
    }
    cout << "\n";
}

//ZeroJudge B130
//Dr. SeanXD

發佈留言