Given an array of integers A[N], you are asked to decide the shortest array of integers B[M], such that the following two conditions hold.
- For all integers 0 <= i < N, there exists an integer 0 <= j < M, such that A[i] == B[j]
- For all integers 0 =< i < j < M, we have B[i] < B[j]
Notice that for each array A[] a unique array B[] exists.
Input
The input consists of several test cases. For each test case, an integer N (1 <= N <= 100) is given, followed by N integers A[0], A[1], ..., A[N - 1] in a line. A line containing only a zero indicates the end of input.
Output
For each test case in the input, output the array B in one line. There should be exactly one space between the numbers, and there should be no initial or trailing spaces.
Sample Input
8 1 2 3 4 5 6 7 8
8 8 7 6 5 4 3 2 1
8 1 3 2 3 1 2 3 1
0
Sample Output
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3
Author: SHI, Xiaohan
Source: Zhejiang Provincial Programming Contest 2005
求数列中出现过的数值,按升序排列,直接暴力过
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n,p[110],a[110],i,j,k;
while( ~scanf("%d",&n),n ){
k = 0;
for( i = 0 ; i < n ; ++i ){
scanf("%d",&p[i]);
bool flag = false;
for( j = 0 ; j < i ; ++j ){
if( p[i] == p[j] ){
flag = true;
break;
}
}
if( !flag )
a[k++] = p[i];
}
sort(a,a+k);
for( i = 0 ; i < k ; ++i ){
if( i )
printf(" %d",a[i]);
else printf("%d",a[i]);
}
printf("\n");
}
return 0;
}