Problem:明明的隨機數
阿新 • • 發佈:2021-02-12
Problem Description
明明想在學校中請一些同學一起做一項問卷調查。
為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數,對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。
然後再把這些數從小到大排序,按照排好的順序去找同學做調查。
請你協助明明完成“去重”與“排序”的工作。
Input Format
輸入檔案包含2行,第1行為1個正整數,表示所生成的隨機數的個數:N 。
第2行有N個用空格隔開的正整數,為所產生的隨機數。
Output Format
輸出檔案也是2行,第1行為1個正整數M,表示不相同的隨機數的個數。
第2行為M個用空格隔開的正整數,為從小到大排好序的不相同的隨機數。
Scope of Data
1 ≤ N ≤ 100
Sample Input
Sample Output
Idea
排序 + 去重
Program Code
- 與前一個數值比較
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int arr[N];
int main()
{
int cnt = 1;
cin >> n;
for(int i = 0; i < n; ++ i)
cin >> arr[i];
sort(arr, arr + n);
for(int i = 1; i < n; ++ i) //如果當前數值與前一個數值不一樣,就認定為是單個數字
if(arr[i] != arr[i - 1])
arr[cnt ++] = arr[i];
cout << cnt << endl;
for(int i = 0; i < cnt; ++ i)
cout << arr[i] << ' ';
return 0;
}
- 使用STL的unique函式
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int arr[N];
int main()
{
int cnt = 1;
cin >> n;
for(int i = 0; i < n; ++ i)
cin >> arr[i];
sort(arr, arr + n);
cnt = unique(arr, arr + n) - arr; //使用STL的unique函式
cout << cnt << endl;
for(int i = 0; i < cnt; ++ i)
cout << arr[i] << ' ';
return 0;
}
- If you have any questions,please feel free to communicate with me.