有1001個元素的陣列,元素都是1~1000的整數,只有一個元素是重複的,找出重複元素
阿新 • • 發佈:2021-02-15
技術標籤:# 演算法題
方法一:申請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; }