题干:
1到100的数字放到101大小的数组中,数组最后一个数组是1到100的数字,请找到唯一成对的数字。
方法一:使用额外空间。
再开辟一个数组,原数组每一个元素的值对应到新数组上。如果是成对的数字,则对应新数组上的值为2,不成对数字为1.
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define N 100
int main()
{
srand((unsigned)time(NULL));
int arr[N + 1] = { 0 };
for (int i = 0; i < N ; i++)
{
arr[i] = i + 1;
}
arr[N] = rand() % 100 + 1;
int*arr2 = (int*)calloc(4, sizeof(int)* 100);
for (int i = 0; i <= 100; i++)
{
arr2[arr[i] - 1]++;
}
int x = 0;
for (int i = 0; i < 100; i++)
{
if (arr2[i] == 2)
{
x = arr[i];
}
}
printf("%d",x);
}
方法二:不使用额外空间
成对数字异或后为0,先将1到100数字异或后再和数组中的元素异或
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define N 100
int main()
{
srand((unsigned)time(NULL));
int arr[N + 1] = { 0 };
for (int i = 0; i < N ; i++)
{
arr[i] = i + 1;
}
arr[N] = rand() % 100 + 1;
int x = 0;
for (int i = 1; i <= N;i++)
{
x = x^i;
}
for (int i = 0; i <= N; i++)
{
x = x^arr[i];
}
printf("%d",x);
return 0;
}