zoukankan      html  css  js  c++  java
  • 面试中常问到的称小球问题

    有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);
    	}
    }
    


     

  • 相关阅读:
    C:大数相加
    杭电2186:悼念512汶川大地震遇难同胞——一定要记住我爱你
    实验五
    安装vmtools
    ubuntu20.04换源
    实验一 灯程序——OK6410A开发板LINUX3.0.1(嵌入式开发)
    OK6410A开发板LINUX3.0.1配置(嵌入式开发)
    实验四 Makefile
    虚拟机联网
    实验三 按键灯
  • 原文地址:https://www.cnblogs.com/james1207/p/3304051.html
Copyright © 2011-2022 走看看