A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吃饭工作睡觉 中级黑马   /  2015-11-3 09:05  /  3597 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个     第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下     的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
希望程序的逻辑关系写清楚,谢谢!

最佳答案

查看完整内容

public static void main(String[] args) { //倒推,最后也就是第10天剩一个 int n=1; //从9天到第1天是同样的模式,所以用循环。 for (int i = 9; i >= 1; i--) { //每天早上都吃了前一天剩下的一半零一个 //比如 第二天的个数=(第一天的个数/2)-1,也就是 第一天的个数=(第二天的个数+1)*2 //循环昨天=(今天*2)*1 n=(n*2)+1; ...

10 个回复

正序浏览
xingjiyuan26 发表于 2015-11-3 11:39
注释很详细吧,不懂的话继续问哦

谢谢你的解答!很受用!
回复 使用道具 举报
雨来 高级黑马 2015-11-5 00:15:39
9#
学习了不错
回复 使用道具 举报
poxiao 中级黑马 2015-11-4 20:46:54
8#
最后一天剩1个,则设第九天没吃之前的桃子数为x,则x - (1/2x + 1) = 1 =>x = 4,再推第八天,设第八天的桃子数为x,则x - (1/2x + 1) = 4 =>x = 10,...以此类推可得出前一天的桃子数是后一天桃子数加1再乘以2,所以函数应为:
void countPeach()
{
        int count = 1;//第10天的桃子数
        int i = 9, j = 0;

        for (i; i > 0; i--) // 已知第10天为1个,所以计算剩下9天的桃子数
        {
            count = (count + 1) * 2;
        }
        printf ("The number of peach is: %d \n", count);
}
回复 使用道具 举报
顶写代码了几位层主。。。
回复 使用道具 举报
  1. /*
  2. 题意分析。
  3. 吃一半桃子,然后再吃一个,一共吃了9次,最后剩一个桃子。
  4. 逆序求值  x = (x+1)*2; 执行9次之后,可得到最初的桃子数
  5. */

  6. class PeachProblem {
  7.         public static void main(String[] args) {
  8.                 int num = 1;                              
  9.                 for (int i = 0; i < 9 ; i++ ) {            
  10.                         num = (num + 1)*2;                                          
  11.                 }
  12.                 System.out.println("第一天摘的桃子数为"+num);  //最后的结果为1534,话说这猴子第一天吃了767+1,这猴子是孙悟空吧。。
  13.         }
  14. }
复制代码
回复 使用道具 举报
2楼的写的很详细了 想起了以前刚学C的时候也写过这题 好遥远了
回复 使用道具 举报
俩人的程序完全一样,哈哈
回复 使用道具 举报
注释很详细吧,不懂的话继续问哦
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 //倒推,最后也就是第10天剩一个
  4.                 int n=1;
  5.                 //从9天到第1天是同样的模式,所以用循环。
  6.                 for (int i = 9; i >= 1; i--) {
  7.                         //每天早上都吃了前一天剩下的一半零一个
  8.                         //比如 第二天的个数=(第一天的个数/2)-1,也就是 第一天的个数=(第二天的个数+1)*2
  9.                         //循环昨天=(今天+1)*2
  10.                         n=(n+1)*2;
  11.                 }
  12.                 //从9天到第1天循环完毕,即得到第1天的桃子个数
  13.                 System.out.println(n);
  14.         }
复制代码
回复 使用道具 举报
  1. public class test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int sum=1,i;
  6.                 for(i=0;i<9;i++){
  7.                         sum=(sum+1)*2;
  8.                 }
  9.                 System.out.println("第一天共摘了 "+sum+" 个桃子.");

  10.         }
  11. }
复制代码
回复 使用道具 举报
public static void main(String[] args) {
        //倒推,最后也就是第10天剩一个
        int n=1;
        //从9天到第1天是同样的模式,所以用循环。
        for (int i = 9; i >= 1; i--) {
                //每天早上都吃了前一天剩下的一半零一个
                //比如 第二天的个数=(第一天的个数/2)-1,也就是 第一天的个数=(第二天的个数+1)*2
                //循环昨天=(今天*2)*1
                n=(n*2)+1;
        }
        //从9天到第1天循环完毕,即得到第1天的桃子个数
        System.out.println(n);
    }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马