【HJ3】明明的隨機數
阿新 • • 發佈:2021-01-09
題目描述
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了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。
題解思路
- 對輸入陣列去重,並排序,利用 C++ set 容器操作。注意可以依次輸出每組排好序的結果;
- 如果不利用set自動去重和排序,就使用 vector 儲存,sort 排序,輸入時作去重判斷;
- 因為輸入數字是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;
}