题目描述:
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,
也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},
那么对应的输出是重复的数字2或者3。
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//面试题3(一):找出数组中重复的数字
bool cout_first(int *arr,int length) //打印第一次出现的数字
{
if (arr == NULL||length<=0)
{
return false;
}
for (int i = 0; i < length; i++)
{
if (arr[i]<0 || arr[i]>length)
{
return false;
}
}
for (int i = 0; i < length; i++)
{
while (arr[i] != i)
{
int m = arr[i];
int temp;
if (arr[m] == arr[i])
{
printf("%d \n",arr[m]);
return true;
}
temp = arr[m];
arr[m] = arr[i];
arr[i] = temp;
}
}
return false;
}
int main()
{
//int a[7] = {2,3,1,0,2,5,3};
int i = 0, n = 1; //动态可变长数组的输入
int *a;
a = (int *)malloc(n*sizeof(int));
do
{
scanf_s("%d",&a[i++],1);
a=(int *)realloc(a, ++n*sizeof(int));
} while (getchar() != '\n');
for (i = 0; i < n - 1; i++)
{
printf("%d", a[i]);
}
printf("\n");
cout_first(a, i);
}