1. 程式人生 > >計蒜客:蒜頭君的隨機數

計蒜客:蒜頭君的隨機數

問題:

蒜頭君很無聊,現在有 N N 個數,其中第 i ( 1 i

N ) i(1 \leq i \leq N) 個數是 A i A_i
現在他先將 A
l 1 , A l 1 +
1
. . . A r 1 A_{l_1}, A_{l_1+1}...A_{r_1}
從小到大排序。
再將 A l 2 , A l 2 + 1 . . . A r 2 A_{l_2}, A_{l_2+1}...A_{r_2} 從大到小排序。
請輸出 A A 排序後的最終結果。

輸入格式:
第一行五個整數 N , l 1 , r 1 , l 2 , r 2 ( l 1 < r 1 , l 2 < r 2 ) N, l_1, r_1, l_2, r_2(l_1 \lt r_1,l_2 \lt r_2) ,均不超過 100000 100000
第二行 N N 個不超過 int 範圍的整數,表示 A A 陣列。

輸出格式:
一行 N N 個用空格分隔的整數,表示 A A 排序以後的結果。

樣例輸入:

6 1 3 2 4
8 3 1 6 9 2

樣例輸出:

1 8 6 3 9 2

題解:

思路:先用兩層for迴圈找到相同的數字,然後再用一層迴圈把重複的刪除,同時把個數減少,之後再用sort()函式排序

#include<iostream>
#include<algorithm>
using namespace std;
int main(void)
{
	int n;
	cout << "請輸入要輸入的數字個數:";
	cin >> n;
	int *p = new int[n];
	cout << "請輸入" << n << "個數據:" << endl;
	for (int i = 0; i < n; i++)
		cin>>p[i];
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (p[j] == p[i] && j != i)
			{
				for (int x = j; x < n; x++)
					p[x] = p[x + 1];
				n--;
			}
		}
	}
	sort(p, p + n);
	cout << "除重後有:" << n << "個數據" << endl;
	cout << "排序好的資料為:" << endl;
	for (int i = 0; i < n; i++)
		cout << p[i] << " ";
	cout << endl;
	system("pause");
	return 0;
}