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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 箫庐 黑马帝   /  2011-12-6 17:35  /  3345 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 箫庐 于 2011-12-8 10:54 编辑

题目:

        海滩上有一堆桃子和五只猴子
        第一只猴子先来到海滩上, 发现了桃子, 将桃子分成5份, 发现多了一个, 把多的一个扔到了海里, 拿走了一份
        第二只猴子也来到海滩上, 发现桃子之后也是分成5份, 又多了一个, 还是扔到海里, 拿走了一份
        后面三只猴子都是这么做的, 问海滩上最初最少有多少个桃子?
-----------------------------------------------------------------------------------------
        这是基础班第五天付老师布置的一道题目,我花了大半晚上熬夜再做出来的;但是很繁琐,大家看有没有更优化的编程?

       另,管理员多给点技术分嘛~~我着急呢,现在北京上基础班,没有多少时间来上网.没多少时间了,担心技术分不够,极想上六期呢!

       我的程序:

            int i = 6,ii=0;
            int j = 5;
            boolean b = false;
            for (j = 5; j >= 1; ){
                if ((((i - 1) % 5)) == 0){
                    if (j == 5)
                        ii = i;
                    j--;
                    i = (i - ((i - 1) / 5)) - 1;
                    b = true;
                }else{
                    if (b){
                        j = 5;
                        i = ii + 1;
                        b = false;
                    } else
                        i++;
                }
            }
           System.out.println("海滩上最初的桃子个数为:"+ii+"个~");

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

12 个回复

倒序浏览
同学你再看看你的这个问题,有没有写错什么或漏掉什么,怎么感觉没有边界。你自己写的那个6是什么意思?我在网上看到这个题是求最少有多少个桃子。
回复 使用道具 举报
wsssx 2011-12-6 18:40:48
藤椅
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
wsssx 2011-12-7 08:17:25
板凳
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
本帖最后由 方书堂 于 2011-12-8 09:52 编辑

{:soso_e109:}  思路错了
回复 使用道具 举报
本帖最后由 黄喆 于 2011-12-8 09:22 编辑

class PeachNum
{
        public static void main(String[] args)
        {
                int num;
                int total = 5;               
                boolean b = true;
                while (b)
                {
                        total++;
                        num = total;
                        for(int x=0;x<5;x++)
                        {                                                         
                                if(((num-1)%5)!=0)
                                        break;
                                else                                                                               
                                        num= 4*(num-1)/5;                                                                                                 
                                if (x==4)
                                {                                          
                                        b = false;
                                        System.out.println("共有"+total+"个桃子");                                         
                                }                               
                        }
                }       
                for(int x=1;x<=5;x++)
                {
                        int m = (total-1)/5;
                        System.out.println("第"+x+"只猴子拿了" +m+"个桃子。");
                          total = 4*m;
                }               
        }
}

运行结果 共有3121个桃子,第一只猴子拿了624个,第二只猴子拿了499个,第三只猴子拿了399个,第四只猴子拿了319个,第5只猴子拿了255个
回复 使用道具 举报
箫庐 黑马帝 2011-12-8 08:50:09
7#
本帖最后由 箫庐 于 2011-12-8 10:05 编辑
wsssx 发表于 2011-12-6 18:40
求最好有多少桃子的话,直接从最后一个猴子开始,最小的数,可以分成5分还多一个的是6,然后向上累加不就可 ...


最少是 3121个;
往后面加的话有无数个答案;
回复 使用道具 举报
箫庐 黑马帝 2011-12-8 08:53:15
8#
wsssx 发表于 2011-12-7 08:17
这道题目的思路是这样的:设最后一个猴子最后拿走的桃子是x,桃子的总量是y。假设x=1,y是一个分数,但桃子 ...

嗯.确实是最少有多少个.不然有多个答案.
我的6是随便赋值的.因为一个猴子要分五份余一个,至少要6个.从1开始也可以的.

不过我也迷糊了,自己写的这个条件.满足最少的桃子数后,是怎么跳出循环的~~能不能帮我解释下嘛.我自己是知道老师给的答案数值,凑合写出来的程序.隔了两天,也有点看不懂了,不知道是怎么跳出循环的……晕
回复 使用道具 举报
黄喆 黑马帝 2011-12-8 09:20:53
9#
箫庐 发表于 2011-12-8 08:50
最少是 3123个;
往后面加的话有无数个答案;

3123 第一只猴子就不能分成5份
回复 使用道具 举报
箫庐 黑马帝 2011-12-8 10:07:24
10#
黄喆 发表于 2011-12-8 09:20
3123 第一只猴子就不能分成5份

嗯嗯.
上课前看帖子,匆忙回复的.
是3121个.
顺便帮我分析下我原来写的程序是怎么跳出循环呢?结果是碰对了,也就只有一个3121.说明得出3121就跳出循环了.但我居然不知道是怎么跳出循环的,谢谢~~
回复 使用道具 举报
黄喆 发表于 2011-12-7 16:05
class PeachNum
{
        public static void main(String[] args)

受教了,原来自己的思路一直想错了。。没有把每次留下的桃子是上次的4/5,考虑进来。。
回复 使用道具 举报
黄喆 黑马帝 2011-12-8 10:50:37
12#
箫庐 发表于 2011-12-8 10:07
嗯嗯.
上课前看帖子,匆忙回复的.
是3121个.

if ((((i - 1) % 5)) == 0) 条件满足一次 j--  一次,满足5次后j==0,for循环结束

评分

参与人数 1黑马币 +1 收起 理由
箫庐 + 1

查看全部评分

回复 使用道具 举报
箫庐 黑马帝 2011-12-8 10:53:05
13#
黄喆 发表于 2011-12-8 10:50
if ((((i - 1) % 5)) == 0) 条件满足一次 j--  一次,满足5次后j==0,for循环结束

哦.谢谢哈.原来自己写的东西也会有不明白的时候.看来需要多写注释啊.经验啊.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马