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

你可能感兴趣的:(编程,算法,职场,计算机,休闲)