题目:http://codeforces.com/problemset/problem/519/B

题目的大概意思为:最初,编译器显示有N个编译错误,其中每一个被表示为一个正整数。经过一番努力,B设法解决一个错误,然后又编译了下,又改正了一个错误。找出被修改的错误。

这个题思路很明确,就是找不同,第一组和第二组,第二组和第三组之间的不同的数字。

第一种方法,我们直接储存所有的数字,排序后来寻找不同的数字。代码如下:

#include<stdio.h>
#include<algorithm>
using namespace std;

#define MAXN 100010
int main()
{
    int a[MAXN]={0},b[MAXN]={0},c[MAXN]={0},n,i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n-1;i++)
        scanf("%d",&b[i]);
    for(i=0;i<n-2;i++)
        scanf("%d",&c[i]);
    sort(a,a+n);
    sort(b,b+n-1);
    sort(c,c+n-2);
    for(i=0;i<n;i++)
        if(a[i]!=b[i])
        {
            printf("%d\n",a[i]);
            break;
        }
    for(i=0;i<n-1;i++)
        if(b[i]!=c[i]){
            printf("%d\n",b[i]);
            break;
        }
    return 0;
}

第二种方法,既然第一组数据和第二组数据只有一个数字不同,那我们可以直接求和,然后求差值,差值即为缺少的数字。代码如下:

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    long long sum1,sum2,sum3,x;
    int n,i;
    sum1=sum2=sum3=0;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%lld",&x);
        sum1+=x;
    }
    for(i=1;i<n;i++){
        scanf("%lld",&x);
        sum2+=x;
    }
    for(i=2;i<n;i++){
        scanf("%lld",&x);
        sum3+=x;
    }
    printf("%lld\n%lld\n",sum1-sum2,sum2-sum3);
    return 0;
}