趣味算法-寻找假硬币
2012-04-02 11:01
260 查看
趣味算法-寻找假硬币
8枚硬币,一枚假的,假的比真的少轻,通过程序寻找假硬币。
采用分治算法:
1) 硬币分2组,找出比较轻的一组。
2) 再把稍轻的一组继续分为2组,再找出稍轻的一组。
3) 直至比较2个硬币为止。
算法复杂度
O(N) = Log2(N)
8枚硬币,一枚假的,假的比真的少轻,通过程序寻找假硬币。
采用分治算法:
1) 硬币分2组,找出比较轻的一组。
2) 再把稍轻的一组继续分为2组,再找出稍轻的一组。
3) 直至比较2个硬币为止。
#include <stdio.h> int checkcoin(int arrCoin[], int nStart, int nEnd) { int nMid = (nStart+nEnd)/2; int nResult; if (nStart == nEnd) { return -1; } if (nEnd - nStart == 1) { if (arrCoin[nStart] < arrCoin[nEnd]) { return nStart; } else if (arrCoin[nStart] > arrCoin[nEnd]) { return nEnd; } } else { nResult = checkcoin(arrCoin, nStart, nMid); if (nResult != -1) return nResult; nResult = checkcoin(arrCoin, nMid, nEnd); if (nResult != -1) return nResult; } return -1; } int main() { int arrTest[8] = {3,3,3,3,3,3,1,3}; int nResult = 0; nResult = checkcoin(arrTest, 0, 7); printf("Result = %d \n", nResult); scanf("%d", &nResult); return 0; }
算法复杂度
O(N) = Log2(N)
相关文章推荐
- 十一:贪心算法-寻找硬币
- 趣味算法:猴子搬香蕉问题
- 字符串处理算法(四)现在一个给定字符串中寻找子串的功能(不能使用库函数)[2014百度笔试题]
- 图论——寻找无向连通图割点算法
- 趣味算法之怎样订饭最省钱
- java-趣味算法
- 趣味算法:字符串反转的N种方法(转)
- 算法练习:寻找最小的k个数
- 面试算法学习-5-寻找最小K个值
- 同时寻找最大数和最小数的最优算法 第二大数
- 寻找一个二维数组鞍点的算法实现
- 趣味算法:老鼠试毒瓶问题
- 寻找主元素(高效算法)
- 算法笔记_168:历届试题 矩阵翻硬币(Java)
- 贪心算法——寻找剩余最大数
- [算法]寻找和为定值的多个数
- 匈牙利算法 codevs 2776 寻找代表元
- 同时寻找最大数和最小数的最优算法
- 基于临界灰度值和亚像素的“边缘寻找”算法
- 窥探算法之美妙——寻找数组中最小的K个数&python中巧用最大堆