我估计输出结果应该没有问题吧,不过是这个问题 (๑ó﹏ò๑)
oj显示time limit exceed是超时了,循环层级太多了。
循环次数太多导致超时,代码可以优化一下。数组a中可以只保存不重复的数字,并用另一个数组记录每个不重复数字出现的次数,每次读取时判断新读取的数字是否已经出现过,如果出现过,就把对应的次数+1,否则就将新读取的数插入数组,并且数量置为1.
代码如下:
#include <stdio.h>
long a[1000000];
int f[1000000];
int main()
{
int t;
int i, n, j;
int x;
int nmb = 0; //记录每组数中不重复数的个数,a记录不重复的数字,f记录a中数字出现的次数
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
nmb = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &x);
//判断x是否已经存在
for (j = 0; j < nmb; j++)
{
if (a[j] == x)
{
f[j]++;
break;
}
}
if (j == nmb)
{
a[nmb] = x;
f[nmb] = 1;
nmb++;
}
}
//输出出现奇数次的数
if (nmb > 0)
{
x = 0;
for (i = 0; i < nmb; i++)
{
if (f[i] % 2 == 1)
{
if (x == 0) //避免最后一个数后面有空格
{
x++;
printf("%lld", a[i]);
}
else
printf(" %lld", a[i]);
}
}
printf("\n");
}
}
return 0;
}