关于一道简单的智力题

来源:互联网 发布:js 数组去掉最后一个 编辑:程序博客网 时间:2024/05/02 04:26

有幸遇到了一些智力题。

 

题目1(限时一分钟):
袋子里有若干个球,每次拿出其中的一半再放回一个球,一共这样做了489次,袋中,还有2个球,问:原来袋中有多少个球?


答:


第一次: n/2+1
第二次:(n/2+1)/2+1  =n/2^2+1/2+1
.
.
.
第i次:  n/2^i+1/2^(i-1)+1/2^(i-2)+...+1/2+1  (第二项到1为比例为1/2的等比数列)

n/2^i+1/2^i-1+1/2^i-2+...+1/2+1=n/2^i + (1-1/2^i)/(1-1/2)=n/2^i+2-1/2^(i-1)=2  =》n/2^i=1/2^(i-1) s=>n=2

 

题目2(限时一分钟) :

袋子里有若干个球,每次拿出其中的一半再放回一个球,一共这样做了5次,袋中还有3个球,问:原来袋中有多少个球?

n/2^i+2-1/2^(i-1)=3 => n=2^i+2=> n=34

 

程序:

       

public class Test {/** * 获取原始总数量 * @param times   取出次数 * @param remainCnt 最后剩余数量 * @return */public int getCnt(int times,int remainCnt){int count=remainCnt; if(times==0||remainCnt==0){    return 0;}for(int i=0;i<times;i++){count=(count-1)*2;}return count;}public static void main(String[] args){Test t=new Test();int cnt=t.getCnt(485,2);  // 取出485次,剩2个int cnt2=t.getCnt(5,3);  //  取出5次,剩余3个 System.out.println(cnt);//输出结果是 2System.out.println(cnt2);//输出结果是,答案34 }}


 【2016 -12 -18 comment 】:

       袋子里有 T 个球,每次拿出其中的一半再放回一个球,一共这样做了n次,袋中还有K个球,问:原来袋中有T 是多少?

       总结: T=(K-2)* 2^n +2 

   T :原来球的总数

   K:剩余球的数量

   n:   操作次数



 

 

 

 

 

 

 

原创粉丝点击