在現實生活中,我估計這個問題沒有多大的意義, 但作為你一種方法,可以借鑒,也可以得出一個結論,那就是盡量把數學知識應用於編程之中,算法會完美。 /*********************************************************************************************************************************** 1: 問題描述:給定包含101個元素的數組arr,數組中元素一定屬於[1,100],並且[1,100]之間的每個數都在arr中出現過。 2: 解決方案:分析,數組中有101個元素,如果[1,100]之間的每個數出現一次,那就是100個元素了,剩下的那個元素就是唯一的重復出現的元素。 我們可以通過遍歷arr,得到arr中所有元素的總和,然後既然[1,100]之間的每個數出現一次,那麼我們減去1+2+……+99+100的和, 結果就是我們需要的唯一的重復出現的元素了。時間復雜度是O(n)。 *************************************************************************************************************************************/
//數組元素遞歸求和 int sum(int a[], int length) { int result = 0; if (length == 1) { result = a[0]; } else { result = sum(a, length - 1) + a[length - 1]; } return result; } //利用等差數列求出1---100的和,然後相減就可以了。 int getrepeated(int a[]) { int temp1 = (1 + 100) * 100 /2; int temp2 = sum(a, 101); return temp2 - temp1; }