| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1711 人关注过本帖
标题:一道无数答案的题,帮忙解一下
只看楼主 加入收藏
wtuaimmmm
该用户已被删除
收藏
已结贴  问题点数:4 回复次数:21 
一道无数答案的题,帮忙解一下
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: 桃子 
2010-05-25 18:49
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
程序代码:
public class Test {
    private void test(int num){
        for(int i=0;i<5;i++){
            System.out.println("第"+i+1+"次");
            System.out.println("num="+num);
            num--;
            System.out.println("扔掉一个="+num);
            System.out.println("平分5份,取走一份,为:"+num/5);
            num=num*4/5;
        }
    }
    public static void main(String[] args) {
        int num = 5;
        int i;
        int remain;
        for (int j = 1;; j++) {
            remain = 4 * j;
            for (i = 0; i < num; i++) {
                if (remain % 4 == 0) {
                    remain = remain * 5 / 4 + 1;
                } else
                    break;
            }
            if (i == num) {
                System.out.println(remain);
                break;
            }
        }
        Test t = new Test();
        t.test(remain);
    }

}
2010-05-25 21:21
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
早上想了一下,觉得代码不够严密。修改了下
程序代码:
public class Test {
    private void test(int num){
        for(int i=0;i<5;i++){
            System.out.println("第"+i+1+"次");
            System.out.println("num="+num);
            num--;
            System.out.println("扔掉一个="+num);
            System.out.println("平分5份,取走一份,为:"+num/5);
            num=num*4/5;
        }
    }
    public static void main(String[] args) {
        int num = 5;
        int i;
        int remain;
        boolean b = false;
        for (int j = 1;; j++) {
            remain = 4 * j;
            for (i = 0; i < num; i++) {
                if (remain % 4 == 0) {
                    remain = remain * 5 / 4 + 1;
                    b=true;
                } else{
                    b=false;
                    break;
                }
            }
            if (i == num&&!b) {
                System.out.println(remain);
                break;
            }
        }
        Test t = new Test();
        t.test(remain);
    }

}
2010-05-26 08:52
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 2楼 linjx0123
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-26 08:57
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 3楼 linjx0123
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-26 08:59
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:4 
程序代码:
public class Test {
    private void test(int num){
        for(int i=0;i<5;i++){
            System.out.println("第"+i+1+"次");
            System.out.println("num="+num);
            num--;
            System.out.println("扔掉一个="+num);
            System.out.println("平分5份,取走一份,为:"+num/5);
            num=num*4/5;
        }
    }
    public static void main(String[] args) {
        int num = 5;
        int i;
        int remain;
        boolean b = false;
        for (int j = 1;; j++) {
            remain = 4 * j;
            for (i = 0; i < num; i++) {
                if (remain % 4 == 0) {
                    remain = remain * 5 / 4 + 1;
                    b=true;
                } else{
                    b=false;
                    break;
                }
            }
            if (i == num&&b) {
                System.out.println(remain);
                break;
            }
        }
        Test t = new Test();
        t.test(remain);
    }

}
2010-05-26 09:43
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
修改后成为死循环,是因为逻辑出了点小错误,我觉得这样写跟题意完全符合。

程序是从最小值开始递增的。只要能测出结果符合题意,那么必定是最小值。
扔掉一个,平均5份,拿走一份,每一个数据都输出来,楼主可以自己看看是否正确,自己计算下不就知道了
2010-05-26 09:45
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
修改下测试函数
程序代码:
public class Test {
    private boolean isRight(int num){
        if((num-1)%5==0&&num>1)
            return true;
        else return false;
    }
    private void test(int num){
        StringBuffer str = new StringBuffer();
        for(int i=0;i<5;i++){
            if(isRight(num)){
                 str.append("第"+(i+1)+"次\n");
                 str.append("num="+num+"\n");
                 num--;
                 str.append("扔掉一个="+num+"\n");
                 str.append("平分5份,取走一份,为:"+num/5+"\n");
                 num=num*4/5;
            }else{
                str.delete(0, str.length());
                break;
            }         
        }
        System.out.print(str);
    }
    public static void main(String[] args) {
        int num = 5;
        int i;
        int remain;
        boolean b = false;
        for (int j = 1;; j++) {
            remain = 4 * j;
            for (i = 0; i < num; i++) {
                if (remain % 4 == 0) {
                    remain = remain * 5 / 4 + 1;
                    b=true;
                } else{
                    b=false;
                    break;
                }
            }
            if (i == num&&b) {
                System.out.println(remain);
                break;
            }
        }
        Test t = new Test();
        for(int j=1;j<3123; j++){         
            t.test(j);
        }
    }
}
2010-05-26 10:03
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
思路是这样的,最后扔掉一个桃子的时候,桃子还能够平均5份,那么这时剩下的桃子应该是5n(5的倍数)。
然后猴子又取走了一份,最后只剩下(5-1)*n个桃子。因为要使桃子最少,所以n从1开始算起。直到符合要求。

扔掉一个取走一份,假设原来有x个桃子,那么剩下的就为x-1-(x-1)/5 = (x-1)*4/5.现在已经知道剩下的为remain个桃子,那么上一次的桃子个数为:
remain * 5 / 4 + 1;依次类推,当满5次的时候就是答案。
2010-05-26 10:20
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 9楼 linjx0123
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-26 11:11
快速回复:一道无数答案的题,帮忙解一下
数据加载中...
 
   



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

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