有幸遇到了一些智力題。
題目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);//輸出結果是 2
System.out.println(cnt2);//輸出結果是,答案34
}
}
【2016 -12 -18 comment 】:
袋子裏有 T 個球,每次拿出其中的一半再放回一個球,一共這樣做了n次,袋中還有K個球,問:原來袋中有T 是多少?
總結: T=(K-2)* 2^n +2
T :原來球的總數
K:剩餘球的數量
n: 操作次數