• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

面试中常问到的称小球问题

有9个小球,大小和形状完全相同,其中有一个球比其他球重,提供一个天平,问:为了保证能把较重的那个球找出来,至少需要称量几次?

相信大家可能都遇到过这种问题,常作为面试时的智商题进行考察。现对此问题进行研究,用程序展现出了计算该问题的方法,如下:

public class TestWeightingBalls {
	private static int count = 0;
	
	public static void main(String[] args) {
		int num = 9;//小球的个数
		System.out.println(getWeightCount(num));//输出3
		
	}
	
	/**
	 * 输入小球数目,返回需要称量的次数
	 * @param ballNum
	 * @return
	 */
	private static int getWeightCount(int ballNum){
		//进行一次分组(分为3份,其中至少有2整份)
		ballNum = getBallNumByGrouping(ballNum);
		//将前两整份放置在天平的两段进行一次称量,确定目标球在三份中的哪一份
		count++;
		
		//如果每组的小球数目>1,即还未称出来,那么继续进行分组和称量
		if(ballNum>1){
			return getWeightCount(ballNum);
		}
		
		return count;
	}
	
	
	/**
	 * 获取称量时要在天平的每端放置的小球数目,比如有9个球,需要在天平的每端放置3个球
	 * @param num
	 * @return
	 */
	private static int getBallNumByGrouping(int num){
		
		double number = Double.valueOf(num);
		//将除法运算结果向上取整
		return (int)Math.ceil(number/3);
	}
}


 

 

posted @ 2013-09-05 19:01  Class Xman  阅读(305)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3