對隨機數“去重”和“排序”(使用set實現)
阿新 • • 發佈:2019-02-14
題目
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤100),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作。
輸入格式
輸入多行,先輸入隨機整數的個數,在輸入相應個數的整數
輸出格式
返回多行,處理後的結果
程式碼
#include <iostream>
#include <set>
using namespace std;
int main() {
int n;//n為輸入的數字總個數
while (cin >> n) {//迴圈輸入
set<int>arr;
int input;
for (int i = 0; i < n; i++) {
cin >> input;
arr.insert(input);
}
for (auto c: arr)
cout << c << endl;
}
system("pause" );
return 0;
}
註釋
1.set容器
C++Primer第五版11章關聯容器—— PP373
關聯容器支援高效的關鍵字查詢和訪問。
set是一個要求不重複關鍵字,有序儲存的集合。
set的兩個重要屬性:
a. set中每個元素只包含一個關鍵字
正好適合本題的“去重”要求
宣告格式:
#include<set>
set<int>arr;
b. set按關鍵字有序(從小到大)儲存元素
對應本題的“排序”要求
宣告格式:
arr.insert(input);
2.範圍for語句
C++Primer第五版使用基於範圍的for語句—— PP82
如果想對string物件中的每個字元做點什麼操作,目前最好的辦法是使用C++11新標準提供的一種語句,範圍for(range for)語句。這種語句遍歷給定序列中的每個元素並對序列中的每個值執行某種操作,其語法形式是:
for(declaration: expression)
statement
其中,expression部分是一個物件,用於表示一個序列。
declaration部分負責定義一個變數,該變數將被用於訪問序列的基礎元素。每次迭代,declaration部分的變數會被初始化為expression部分的下一個元素值。
string str(“some”);
for (auto c : str) //對於str的每個字元
cout << c << endl; //輸出當前字元,後面緊跟一個換行符
通過使用auto關鍵字讓編譯器決定變數c的型別,這裡c是char,每次迭代,str的下一個字元被拷貝給c,因此該迴圈可以讀作”對於字串str中的每個字元c“執行某某操作。