| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1711 人关注过本帖
标题:一道无数答案的题,帮忙解一下
只看楼主 加入收藏
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
楼主要注意一下,平均5份取走的是一份,而不是取走一个。取走了一份剩下的只有4份。
倒数第一次假如是6;那么
倒数第二次是6/(4/5)+1. 也就是8.5个。但是个数要整数的所以不符合要求。
当然验证过去的话就是8.5个扔掉一个是7.5个,7.5个平均5份,每份就是1.5个,取走了一份后,剩下的为7.5-1.5=6个
2010-05-26 12:10
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 9楼 linjx0123
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-26 13:25
wtuaimmmm
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-26 14:32
成小军
Rank: 2
等 级:论坛游民
帖 子:4
专家分:20
注 册:2010-5-25
收藏
得分:0 
是(((6*5+1)*5+1)*5+1)*5+1
2010-05-27 23:11
成小军
Rank: 2
等 级:论坛游民
帖 子:4
专家分:20
注 册:2010-5-25
收藏
得分:0 
39051
2010-05-27 23:13
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
回复 13楼 wtuaimmmm
正序求解虽然可以,但是效率太低,要循环好多次(>3000)才得解。逆序的话循环51次左右就得出答案了。
还有,你的正序求解中也可以稍微优化点。
程序代码:
 public static void main(String[] args) {
        int num = 0;
        int x = 0;
        int m = 0;
        loop: for (int i = 0;; i++) {
            m = i;
            for (int k = 0; k < 5; k++) {
                x = m % 5;
                if (x == 1) {
                    num++;
                    m = m - (m / 5 + 1);
                    if (num == 5) {
                        System.out.println(i);
                        break loop;

                    }
                } else {
                    num = 0;
                    break;//跳出循环,减少不必要的计算
                }
            }

        }
    }

 
2010-05-28 09:44
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 16楼 linjx0123
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-28 14:22
baifenghan
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:258
专家分:952
注 册:2006-3-17
收藏
得分:0 
说实话,我怀疑这道题目是没有答案的,但是我还不能证明。
package test;

public class Peach {
   
    private long copyCount = 5;
    private long mokeyCount = 5;
   
    public Peach() {
    }
   
    public Peach(long copyCount, long mokeyCount) {
        this.copyCount = copyCount;
        this.mokeyCount = mokeyCount;
    }
   
    /**
     * leftCount 最后海滩上还剩下的桃子数目
     * @param leftCount
     * @return
     */
    private long divideOnce(long leftCount)
    {
        return leftCount / 4 * copyCount + 1;
    }
   
    /**
     * 获取桃子的总数
     * @return
     */
    public long getTotal()
    {
        long ret = 4;
        int k = 1, start = 2;
        //如果输入的参数是0,或者不是4的倍数,说明输入参数无效
        while (true) {
            if (k == mokeyCount) {
                break;
            }
            if (ret % 4 == 0) {
                ret = divideOnce(ret);
                k++;
            } else {
                ret = 4 * start;
                start++;
                k = 1;
            }
        }
        return ret;
    }
   
    public static void main(String[] args) {
        System.out.println(new Peach().getTotal());
        //124(496) 99(396) 79(316) 63(252)
    }
   

}
我写了一个算法,但是结果似乎有问题,不懂了,大家讨论讨论
2010-06-05 21:31
qq342991688
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:25
专家分:106
注 册:2010-5-30
收藏
得分:0 
最后一只猴子有几个桃
2010-06-12 15:33
qq342991688
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:25
专家分:106
注 册:2010-5-30
收藏
得分:0 
for(int x=0;x<1000;x++){
    if(fu(x)){
        System.out.println(x,5);
    }
}

boolean fu(int x int i){
    if(i==0&&x%5==1){
        return ture;
    }else if(x%5!=1){
            return false;
            }else return fu((x-1)/5*4,i--)
   

}
2010-06-12 15:42
快速回复:一道无数答案的题,帮忙解一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038888 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved