明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了 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