要件の説明:
桃の問題を食べる猿:桃の数の彼の最初の日オフサル、すぐに食べ半分、ない中毒でなく、ものを食べた後、翌朝残った桃の半分食べターンを食べるために。その日の残りの部分の前に朝の後、私は半分にゼロを食べます。10日の朝は、食べたいときには、一つだけ桃を参照してください。探している最初の日は、番号を採取しました。手順の要件は、実装され、whileループました。
アイデアの実現:
プログラムの分析:逆思考の方法を取る、前方から推測します。
日12345。。。10
桃子数 1 4 10 22 46 ?
したがって、桃の計算の数:桃2 + 2の数の前日*
まず、問題を分析:それについて考えるために逆の発想で、タイトルの意味に応じて、我々は推進される第十日からそれを引き出すために逆の考え方を使用することができ、「半ゼロ後の朝の残りの前日を食べます」。
知ら十日には、問題の意味に従って、あります
第9日は、(1 + 1)×2 = 4であるべきです
第八日は、(1 + 4)×2 = 10であるべきです
七日目(10 + 1)* 2 = 22であるべきで、
* 2 = 46など六日目(22 + 1)であるべきで、
1日目2日目までは、(1 + 766)= 1534個の*桃になることです
すなわち、サル1534年の最初の日は、桃を選びました。
この導出の正しさを確認するには、次の方法で、桃1534年の最初の日から、次の日は、766分の1534 = 2-1桃で、ある通常のロジックを、導出する(すなわち、このタイム・トゥ・バックを)それを置くことができます第十一日までに、このようなプッシュは、あなたがこの時点でのみ、猿を見つけます。この時点で、私たちは考えて再び書かれたコードから派生し、それを行うにはケーキの一部である、それを達成する方法は3つ以上のよりも何もない、他の再帰またはループである一方で、一つは、forループに簡単です。
実装コード:
forループ:
public class monkeysProblem {
public static void main(String args[]){
int sum = 1,x = 1;
for(x=1;sum<=9;sum++){
x=(x+1)*2;
}
System.out.println(x);
}
}
whileループ:
public class monkeysProblem {
public static void main(String args[]){
int day = 9;
int x = 1;
while (day>0) {
x = (x+1)*2;
day--;
}
System.out.println(x);
}
}