首页 > 代码库 > 2014华为编程比赛-筷子问题

2014华为编程比赛-筷子问题

 

//华为编程:筷子,找到第一个单对的筷子
#include <stdio.h>
#define max 37
int main()
{
    int n,i,j;
    int a[max];
    int flag=0;
    int error=-1;
    scanf("%d",&n);
    if(n>max)
    {
        printf("%d\n",error);
        return error;
    }
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
//输入数据异常处理
//剩余偶数根筷子,且匹配,无法找到漏掉的筷子
//剩余偶数根筷子,且存在单对的筷子,可以找到漏掉的筷子
    if(n%2==0)
    {
            for(i=0;i<n;i++)
            {
                for(j=i+1;j<n;j++)
                {
                if(a[i]==a[j])
                {
                a[i]=flag;
                a[j]=flag;
                break;
                }
                }
            }
            
            for(i=0;i<n;i++)
            {
                if(a[i]!=flag)
                {
                    printf("%d\n",a[i]);
                    return 0;
                }
            }
            printf("%d\n",error);
    }
//剩余奇数根筷子,必能找到漏掉的筷子
    else
    {
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[i]==a[j])
            {
                a[i]=flag;
                a[j]=flag;
                break;
            }
        }
    }
 
    for(i=0;i<n;i++)
    {
        if(a[i]!=flag)
            printf("%d\n",a[i]);
    }
    }
    return 0;
}

/*测试用例:

输入:    7    1 2 3 2 1 3 2   输出:2

输入:    6    1 2 3 3 2 1      输出:-1

输入:    9   12 11  8 3 3 8 11 12 13  输出:13

输入:39    输出:-1    */ 
 
 
 
转载自:http://www.cnblogs.com/localhoster/p/3700035.html