北大-计算概论
http://ica.openjudge.cn/baseb/05/
本题乍看不难,实则暗藏陷阱
10 1 3 5 5 7 9 4 8 2 6在sample中,这组数据的返回值应当是
NOT EXIST
但实际上却返回了5
【陷阱何在?】
这时候,我们注意到,当程序运行过第一个5之后,还会运行到第二个5,并以第二个5为基准,寻找与之相等的元素。这时候,5就被多算了一次。
所以我们应该想办法禁止程序重复计算。
【还是不对?】
返回NOT EXIST的条件,应当是count<2,而不是count=0。
【最终的解答】
#include<stdio.h>
main()
{
int repeat,ri;
int n,num[500];
int i,j;
int count;
int flag;
int store[500];
scanf("%d",&repeat);
for(ri=0;ri<repeat;ri++)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
count=0;
for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<count;j++)
{
if(num[i]==store[j])
flag=1;
}
if(flag==1)
{
continue;
flag=0;
}
for(j=0;j<n;j++)
{
if(i==j)
continue;
else if(num[i]==num[j])
{
flag=1;
}
}
if(flag==1)
{
store[count]=num[i];
count++;
}
if(count==2)
{
printf("%d\n",num[i]);
break;
}
}
if(count<2)
printf("NOT EXIST\n");
}
}
AC