題目描述
明明先用計算機生成了N個1到1000之間的隨機整數(N≤1000),對於其中重複的數字,只保留一個,把其餘相同的數去掉。然後再把這些數從小到大排序。請你協助明明完成“去重”與“排序”的工作(同一個測試用例裏可能會有多組數據)。
輸入描述:
輸入多行,先輸入隨機整數的個數,再輸入相應個數的整數
輸出描述:
返回多行,處理後的結果
解法1(C):
#include<stdio.h>
int Partition(int array[], int low, int high)
{
int pivot = array[low];
while(low < high)
{
while(low < high && array[high] >= pivot)
--high;
array[low] = array[high];
while(low < high && array[low] <= pivot)
++low;
array[high] = array[low];
}
array[low] = pivot;
return low;
}
void QuickSort(int array[], int low, int high)
{
if(low < high)
{
int pivotpos = Partition(array, low, high);
QuickSort(array, low, pivotpos - 1);
QuickSort(array, pivotpos + 1, high);
}
}
int main()
{
int n, i, k;
int inputArray[1000], outputArray[1000];
while(scanf("%d", &n) != EOF)
{
for(i = 0; i < n; ++i)
scanf("%d", &inputArray[i]);
QuickSort(inputArray, 0, n - 1); //快速排序
k = 0;
for(i = 0; i < n; ++i) //在有序表中去重
{
if(inputArray[i] == inputArray[i + 1])
k++;
else
outputArray[i - k] = inputArray[i];
}
for(i = 0; i < n - k; ++i)
printf("%d\n", outputArray[i]);
}
}
解法2(C):
#include<stdio.h>
int main()
{
int n, i;
int a[1001];
while(scanf("%d", &n) != EOF)
{
int b[1001]= {0};
for(i = 0; i < n; ++i)
{
scanf("%d", &a[i]);
b[a[i]]++;
}
for(i = 1; i < 1001; ++i)
{
if(b[i] != 0)
printf("%d\n", i);
}
}
return 0;
}
解法3(Python3):
while True:
try:
n = int(input())
arr = set()
for i in range(n):
num = int(input())
arr.add(num)
for x in sorted(arr):
print(x)
except:
break