首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java编程疑点

2012-11-20 
java编程疑问我还是一个初学者,最近遇到一个问题很是难解,下面是所求问题,要求用java求解:十五个猴子围成

java编程疑问
我还是一个初学者,最近遇到一个问题很是难解,下面是所求问题,要求用java求解:十五个猴子围成一个圈,一次1-7循环报数,报到7的猴子被淘汰,知道最后一只猴子成为大王。问,哪只猴子最后能成为大王?望能详解并且附上源代码,谢谢!!!

[解决办法]
就是约瑟夫环的问题.参考一下:
http://topic.csdn.net/u/20120627/20/4f300b35-b616-4d3d-8a22-e5313f9fc3cb.html?97837
[解决办法]
楼主学过数据结构没有,初学者应该先考虑算法,然后再考虑具体语言的编程方法。

比如看到这个题目,就应该先考虑用循环链表之类的数据结构来实现这“十五个猴子围成一个圈”,然后从首届点开始依次找下一个节点,逢7将该节点删除。

最后才是想想如果用Java开发,有没有循环链表可供使用?如果没有能不能用其它啥来模拟下?



上来就求源码,对自己帮助真的很大么?
[解决办法]
同意楼上所见
[解决办法]
楼主,建议你培养面相对象的思维,把猴子看成对象,圈也是一个对象,考虑下类之间的关系
[解决办法]
int i=0;
while(l.hasNext()){
i++;
if(i==3){
System.out.println("排除"+l.next());
l.remove();
i=0;
}else{l.next();}
}
if(ll.size()<=1){
System.out.println("最终结果是"+l.next());
}else{
test(l);
}
[解决办法]

Java code
public class Monkey {    //all代表围成圈的个数,interval代表报数间隔    public static void last(int all, int interval) {        //初始化        boolean[] flag = new boolean[all];        for (int i = 0; i< all; i++)            flag[i] = true;                            int i = 0, j=0; //i代表所有人数的位置,j计数,代表1到interval        int end = all;    //记录剩余的人数,初始化为all                //只要剩余的大于 ,就一直循环        while (end > 1) {            if (flag[i]) {            //从没有退出圈子的开始报数                j++;            }            if (j == interval) {    //如果计数等于interval,就退出圈子                    j = 0;                //j重新计数                flag[i] = false;    //退出圈子,标记                end--;                //剩余个数减1            }            i++;            if (i == all) i=0; //一遍循环结束后,i归0,从头开始        }                for (int k=0; k< all; k++) {            if (flag[k])                 System.out.println("大王的位置为: " + (k+1));        }            }        public static void main(String[] args) {        last(15,7);    }} 

热点排行