当前位置:   article > 正文

C语言:猴子吃桃(正向逆向两种思维方式)_猴子吃桃子编程题为什么不能正过来算

猴子吃桃子编程题为什么不能正过来算

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天摘了多少个桃子。

1.正向思维方式

令第一天一共摘了x个桃子,第一天余量为x/2-1,第二天余量为x/4-3/2,第三天余量为x/8-7/4,由此可得式子为x/2^n-(2^0+...+2^(n-1))/2^(n-1)=1。

因为是第十天早上还没吃,故第九天余量为1,简化式子可得:x=2^1+2^2+...+2^8+2^9+2^9,可得x=1534。

程序为:

(注意次方要引用pow函数

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5. int i=1,x=0,y;
  6. for (i=1;i<=9;i++)
  7. {
  8. y=pow(2,i);
  9. x=x+y;
  10. }
  11. x=x+pow(2,9);
  12. printf("%d",x);
  13. return 0;
  14. }
  15. /* x/2^n-(2^0+...+2^(n-1))/2^(n-1)=1
  16. x=2^1+2^2+2^3+...+2^8+2^9+2^9
  17. */

2.逆向思维方式

由最后的1反推回来

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n=1,i;
  5. for (i=9;i>0;i--)
  6. {
  7. n=(n+1)*2;
  8. }
  9. printf("%d",n);
  10. return 0;
  11. }
  12. /*
  13. (1+1)×2=4
  14. (4+1)×2=10
  15. (10+1)×2=22
  16. (22+1)×2=46
  17. (46+1)×2=94
  18. (94+1)×2=190
  19. (190+1)×2=382
  20. (382+1)×2=766
  21. (766+1)×2=1534
  22. */

最后结果为1534

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/505235
推荐阅读
相关标签
  

闽ICP备14008679号