一道有趣算法题(转自水源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]))
没有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]))
相关文章推荐
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 白话经典算法系列之十一 一道有趣的GOOGLE面试题 --【解法2】
- 精妙算法收集---一道有趣的腾讯笔试加分题
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 【白话经典算法系列之十一】一道有趣的GOOGLE面试题 --【解法2】
- 【白话经典算法系列之十一】一道有趣的GOOGLE面试题 --【解法2】
- 【算法】一道有趣的GOOGLE面试题
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 一道有趣的算法题:仿照Excel的列编号,给定一个数字,输出该列编号字符串
- 一道有趣的面试算法题
- 【算法】一道有趣的GOOGLE面试题 --【解法2】
- Nim Game,一个有趣的游戏,也是一道入门算法题。
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 【白话经典算法系列之十】 一道有趣的GOOGLE面试题
- 一道有趣的算法题。。。
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 白话经典算法系列之十 一道有趣的GOOGLE面试题 .
- 一道有趣的算法题
- 白话经典算法系列之十一 一道有趣的GOOGLE面试题 【解法2】
- 【白话经典算法系列之十一】一道有趣的GOOGLE面试题 --【解法2】 .