1. 程式人生 > 其它 >Problem:明明的隨機數

Problem:明明的隨機數

技術標籤:演算法c++

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.