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

java编程疑义

2012-12-27 
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);
}
[解决办法]

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);
}
}

热点排行