1. 程式人生 > 其它 >【陣列】- 如何在C++陣列的去除重複的數字?

【陣列】- 如何在C++陣列的去除重複的數字?

技術標籤:NOIP_C++c++陣列

去除重複數字

陣列是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;
	}
}