您的位置:首页 > 其它

一道有趣算法题(转自水源BBS)

2011-06-21 23:41 337 查看
有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

large = max(A[i],A[i+1])
small = min(A[i],A[i+1])
A[i+1] = large
A[i] = small

得到升序排列的n个整数B
以后,
统计相同的数的重复次数:
c = 0
for each integer B[i] of B

c = c + max( (B[i+1]-B[i]) , 1) {每出现一个重复数,都会使c比B[n-1]-B[0]大1}

所求的结果就是
result = n - (c - (B[n-1] - B[0]))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: