给出 n 个金币,每一个金币重 10g,可是有一个金币的重量是 11g。如今有一个可以精确称重的天平,问最少称几回,可以确保找出那一个重量 11g 的金币?面试
根据贪心的思想,每次尽量大地缩小下次称量金币的个数。故每次能够将金币尽量均匀地分红三份:若 n % 3 = 0,则分红 n/三、n/三、n/3,任意取两份进行比较。若 n % 3 = 1,则分红 n/三、n/三、 n/3 + 1,取个数为 n/3 的两份进行比较。若 n % 3 = 2,则分红 n/3 + 一、n/3。算法
本题为简单的热身题,主要考察贪心的思想,作到 bug free 便可。bash
www.jiuzhang.com/solution/we…网站
/**
* 本参考程序来自九章算法,由 @华助教 提供。版权全部,转发请注明出处。
* - 九章算法致力于帮助更多中国人找到好的工做,教师团队均来自硅谷和国内的一线大公司在职工程师。
* - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
* - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
* - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
*/
public class Solution {
/**
* @param n: The number of coins
* @return: The Minimum weighing times int worst case
*/
public int minimumtimes(int n) {
// Write your code here
int ans;
ans = 0;
if (n % 3 == 0 ) {
n = n - 1;
}
while (n > 0) {
n = n / 3;
ans++;
}
return ans;
}
}复制代码