问题描述:
数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间
the code:
#include <stdio.h>
#include <math.h>
//数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间。
static void FindTwoMissedElements(int *arr, int n)
{
int N = n+2;
int sum = (N+1)*N/2;
int qsum = sum*(2*N+1)/3;
int i, a_b;
for(i=0; i<n; i++)
{
sum -= arr[i];
qsum -= arr[i]*arr[i];
}
a_b = (int)sqrt(2*qsum - sum*sum);
printf("a=%d, b=%d\n", (sum+a_b)>>1, (sum-a_b)>>1);
}
int main()
{
int arr[] = {1,2,3,5,6,7,9};
FindTwoMissedElements(arr, 7);
return 0;
}