题目: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;
}