【陣列】- 如何在C++陣列的去除重複的數字?
阿新 • • 發佈:2021-01-02
去除重複數字
陣列是C++語言重要的資料結構,對它的一些基本操作要熟練掌握。那麼,今天我們就來討論,怎麼去除陣列中重複的數字?
案例
題目描述
給你N個數(n<=100),每個數都在(0~1000)之間,其中由很多重複的數字,請將重複的數字只保留一個,並將剩下的數由小到大排序並輸出。
輸入
輸入有2行。
第1行為1個正整數,表示數的個數:N 。
第2行有N個用空格隔開的整數。
樣例輸入
10
20 40 32 67 40 20 89 300 400 15
輸出
第1行為1個正整數M,表示不相同數的個數。
接下來的M行,每行一個整數,表示從小到大排好序的不相同的數。
樣例輸出
8
15
20
32
40
67
89
300
400
程式程式碼
方法一
#include <iostream>
using namespace std;
int main(){
/*
思路:去除重複的元素,對剩餘的元素進行排序
去除重複的方法一:讀入每個元素都判斷下一個陣列中是否存在該元素
如果存在就不存入陣列,如果不存在再儲存
*/
int i,n,a[110],x,j,t;
bool f; // 用來標記讀入的元素是否出現過
int k = 0; // 表示目前陣列中實際不重複的元素個數
cin >> n;
// i代表將要讀入n個數,相當於是一個計數器
for(i = 0 ; i < n ; i++){
cin >> x;
//判斷x在a陣列中是否存在(a陣列有k個元素)
f = false; // 假設a陣列中沒有元素x
// 迴圈a陣列的k的元素
for(j = 0 ; j < k ; j++){
if(a[j] == x){
f = true;
break; // 停止當前迴圈
}
}
// 如果陣列a中沒有元素x,則將x存入陣列
if(f == false){
a[k] = x;
k++;
}
}
// 排序
for(i = 1 ; i < k ; i++){
for(j = 0 ; j <= k - i - 1 ; j++){
if(a[j] > a[j + 1]){
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
// 輸出
cout << k <<endl;
for(i = 0 ; i < k ; i++){
cout << a[i] << endl;
}
}
方法二
#include <iostream>
using namespace std;
int main(){
/*
思路:去除重複的元素,對剩餘的元素進行排序
去除重複的方法二:由於讀入的元素在 0 ~ 1000 之間,我們準備一個長度為1001的陣列
用來標記 x 有沒有出現過
*/
int i,n,a[110],x,j,t;
int f[1001] = {0}; // 標記陣列
int k = 0; // 表示目前陣列中實際不重複的元素個數
cin >> n;
// i代表將要讀入n個數,相當於是一個計數器
for(i = 0 ; i < n ; i++){
cin >> x;
// 如果陣列a中沒有元素x,則將x存入陣列
if(f[x] == 0){
a[k] = x;
k++;
// 修改標記,標記x出現了
f[x] = 1;
}
}
// 排序
for(i = 1 ; i < k ; i++){
for(j = 0 ; j <= k - i - 1 ; j++){
if(a[j] > a[j + 1]){
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
// 輸出
cout << k <<endl;
for(i = 0 ; i < k ; i++){
cout << a[i] << endl;
}
}