//这里是直接计算不同的个数。将第n个数和前面的n-1个数逐个进行比较判断,全部不同就sum+1,这种
//时间复杂度较高,只能判断到n-1个数时才会停,有点死板
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,j;
int flag=0;
while(scanf("%d",&n)!=EOF)
{
int sum=1;
long long int *a = (long long int*)malloc(2 * n * sizeof(long long int));
if(a==NULL)
{
printf("内存分配失败!");
return 1;
}
for(i=0;i<2*n;i++)
{
scanf("%lld",&a[i]);
}
for(i=1;i<2*n;i++)
{
for(j=0;j<i;j++)
{
if(a[j]!=a[i])
{
flag++;
if(flag==i)
{
sum++;
flag=0;
break;
}
}
if(j==i-1)
{
flag=0;
}
}
}
printf("%d\n",sum);
free(a);
}
return 0;
}
//这里使用的是遇到相同的数就跳出的原则,其中flag代表某数遇到相同的数的次数
//最后我们可以直接使用2*n(即总共数的个数)-flag就行
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,j;
int flag=0;
while(scanf("%d",&n)!=EOF)
{
long long int *a=(long long int*)malloc(2*n*sizeof(long long int));
if(a==NULL)
{
printf("内存分配失败!");
return 1;
}
for(i=0;i<2*n;i++)
{
scanf("%lld",&a[i]);
}
for(i=1;i<2*n;i++)
{
for(j=0;j<i;j++)
{
if(a[j]==a[i])//碰到相同就停止,代表一样的flag就加一个
{
flag++;
break;
}
}
}
printf("%d\n",2*n-flag);
flag=0;
free(a);
}
return 0;
}