一道有趣算法题(转自水源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])) 

点赞