一道有趣算法題(轉自水源BBS)

 有n個整數. 僅使用加減運算(不能使用IF判斷,可使用最大最小值函數),求出這n個數中有幾個互不相同 的數. 如有:1 2 4 2 3 2 3 3 4,則有4個互不相同的數.

 
沒有IF語句的話,算法只有一個分支,需要用max()或min()來 統計重複的數字個數
首先可以用max()函數或min()函數對n個整數排序。
如冒泡排序法:
 {最大數沉底}
 for each integer A[i] of A[n]
   large = max(A[i],A[i+1])
   small = min(A[i],A[i+1])
   A[i+1] = large
   A[i] = small
 
得到升序排列的n個整數B[n]以後,
統計相同的數的重複次數:
   c = 0
   for each integer B[i] of B[n]
     c = c + max( (B[i+1]-B[i])  , 1)  {每出現一個重複數,都會使c比B[n-1]-B[0]大1}
   
   所求的結果就是 
   result = n - (c - (B[n-1] - B[0])) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章