C言語プログラミング(第3版)彼はQinmingの演習4-10
トピック
桃を食べる猿の問題。
サルは初日に数個の桃を摘み、すぐに半分を食べましたが、それだけでは足りず、もう1個食べました。
翌朝、残りの半分を食べて、もう1個食べました。
その後、前日の残り半分と毎朝1個食べました。
n日目の朝にまた食べたいと思った時、桃は1つしか残っていませんでした。
質問:初日に何個の桃が摘まれましたか?対応するプログラムを書いてみてください。(ヒント:逆思考の方法を採用し、後ろから前に推測します)
分析プロセス
入る
条件:正の整数nを入力します(nは奇数です)
出力
条件:初日に摘み取った桃の総数を出力する
分析
n日目には1つの桃があり
ます。n- 1日目には2 *(1 + 1)= 4の桃があり
ます。n- 2日目には2 *(4 + 1)= 10の桃があり
ます。
1日目に、2 *(前日の桃の総数+ 1)桃があります
コード
#include <stdio.h>
#include <math.h>
int main () {
/*定义变量*/
int n; /*定义变量,存储输入的正整数n*/
int num=1; /*定义变量,计算桃子总数*/
/*赋值*/
printf("请输入正整数n:\n"); /*输入提示*/
scanf("%d \n", &n); /*输入并赋给变量*/
/*计算*/
for (int i = 1; i < n; i++) {
/*计算第n-i天的桃子总数,分别相加*/
num = 2*(num+1);
}
printf("第一天摘了%d个桃子\n", num); /*输出,第一天摘得桃子总数*/
return 0;
}