第二个重复出现的数

北大-计算概论

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值