1. 程式人生 > 其它 >【HJ3】明明的隨機數

【HJ3】明明的隨機數

技術標籤:《牛客刷題》系列c++演算法

題目描述

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤1000),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作(同一個測試用例裡可能會有多組資料,希望大家能正確處理)。

:測試用例保證輸入引數的正確性,答題者無需驗證。測試用例不止一組。當沒有新的輸入時,說明輸入結束。

輸入描述:
注意:輸入可能有多組資料。每組資料都包括多行,第一行先輸入隨機整數的個數N,接下來的N行再輸入相應個數的整數。具體格式請看下面的"示例"。

輸出描述:
返回多行,處理後的結果

示例1

輸入
3
2
2
1
11
10
20
40
32
67
40
20
89
300
400
15

輸出
1
2
10
15
20
32
40
67
89
300
400

說明

樣例輸入解釋:
樣例有兩組測試
第一組是3個數字,分別是:2,2,1。
第二組是11個數字,分別是:10,20,40,32,67,40,20,89,300,400,15。

題解思路

  1. 對輸入陣列去重,並排序,利用 C++ set 容器操作。注意可以依次輸出每組排好序的結果;
  2. 如果不利用set自動去重和排序,就使用 vector 儲存,sort 排序,輸入時作去重判斷;
  3. 因為輸入數字是1到1000之間的隨機數,利用陣列來儲存對應 1~1000 索引是否被輸入 ,最後按序輸出即可;

程式碼實現

#include <iostream>
#include <set>

int main()
{
    using namespace std;
    int loop = 0;
    while(cin >> loop) {
        int nums[1000] = {0};
        for(int i = 0; i < loop; ++i) {
            cin >> nums[i];
        }
        set<int> result(nums, nums + loop)
; for(auto it = result.begin(); it != result.end(); ++it) { cout << *it << endl; } } return 0; }

結果
不使用 C++ set 實現程式碼:

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    using namespace std;
    int loop = 0;
    int temp = 0;
    while(cin >> loop) {
        vector<int> nums;
        for(int i = 0; i < loop; ++i) {
            cin >> temp;
            vector<int>::iterator it = find(nums.begin(), nums.end(), temp);
            if(it == nums.end()) {
                nums.push_back(temp);
            }
        }
        sort(nums.begin(), nums.end());
        for(auto it = nums.begin(); it != nums.end(); ++it) {
            cout << *it << endl;
        }
    }
    return 0;
}

結果

#include <iostream>

int main()
{
    using namespace std;
    int loop = 0;
    int n = 0;
    while(cin >> loop) {
        bool nums[1001] = {false};
        for(int i = 0; i < loop; ++i) {
            cin >> n;
            nums[n] = true;
        }
        for(int i = 0; i < 1001; ++i) {
            if(nums[i]) {
                cout << i << endl;
            }
        }
    }
    return 0;
}

結果