指標 不重複數字 洛谷P4305——簡單
阿新 • • 發佈:2018-12-09
題目描述:
給出N個數,要求把其中重複的去掉,只保留第一次出現的數。例如,給出的數為1 2 18 3 3 19 2 3 6 5 4,其中2和3有重複,去除後的結果為1 2 18 3 19 6 5 4。
輸入格式:
輸入第一行為正整數T,表示有T組資料。
接下來每組資料包括兩行,第一行為正整數N,表示有N個數。第二行為要去重的N個正整數。
輸出格式:
對於每組資料,輸出一行,為去重後剩下的數字,數字之間用一個空格隔開。
樣例輸入:
2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6
樣例輸出:
1 2 18 3 19 6 5 4
1 2 3 4 5 6
程式程式碼
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
#include <cstring>
#include <map>
#include <cmath>
using namespace std;
int a[50005],t,n,b;
int Fun(int x)
{
int y;
if(b<0)
y=-b%50005;
else
y=b%50005;
while(a[y]&& a[y]!=b)
{ ++y;
y=y%50005;
}
return y;
}
void fun1(int b)
{
a[Fun(b)]=b;
}
bool fun2(int b)
{
return a[Fun(b)]==b;
}
int main()
{
int i,j;
scanf("%d",&t);
for(j=0;j<t;j++)
{
memset(a,0,sizeof(a));
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&b);
if(!fun2(b))
{
printf("%d ",b);
}
fun1(b);
}
putchar(10);
}
}
說明:
對於30%的資料,1 <= N <= 100,給出的數不大於100,均為非負整數;
對於50%的資料,1 <= N <= 10000,給出的數不大於10000,均為非負整數;
對於100%的資料,1 <= N <= 50000,給出的數在32位有符號整數範圍內。T<=50
PS:本部落格屬於中國石油大學勝利學院ACM協會所有!
BY:高文欣