1. 程式人生 > 其它 >有1001個元素的陣列,元素都是1~1000的整數,只有一個元素是重複的,找出重複元素

有1001個元素的陣列,元素都是1~1000的整數,只有一個元素是重複的,找出重複元素

技術標籤:# 演算法題

方法一:申請1個新陣列記錄每個元素出現的次數,然後掃描這個新陣列

方法二:

先把重複的元素剔除一個,只留下不重複的1000個元素。

則這1000個數必定是:1,2,3,..... ,1000。

1000個元素的求和結果為S, S=1+2+...+1000。

假設原來1001個元素的求和結果為T, 則重複的元素a=T-S。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 1001

int main()
{
	srand(time(NULL));
	int arr[MAX];

	//以下都是在生成1001個元素的陣列,不用管
	for (int i = 0; i < 1000; ++i)
	{
		arr[i] = i + 1;
	}
	for (int i = 0; i < 1000; ++i)
	{
		int j = rand() % (i + 1);
		int tmp = arr[j];
		arr[j] = arr[i];
		arr[i] = tmp;
	}
	arr[1000] = rand() % 1001;//設定arr[1000]是重複元素
	printf("%d\n" , arr[1000]);

	int S=0 , T=0 , a;
	for (int i = 0; i < 1000; i++)
	{
		S += i + 1;
		T += arr[i];
	}
	T += arr[1000];
	a = T - S;
	printf("重複數是:%d\n" , a);
	return 0;
}