您的位置:首页 > 编程语言

13个人遇3自杀(约瑟夫算法)代码实现

2012-09-29 11:00 381 查看
package example.test;

import java.util.ArrayList;

public class Traitor

{

private int
preview;

private int
current;

private int
next;

public void setPreview(int preview)

{

this.preview = preview;

}

public int getPreview()

{

return preview;

}

public int getCurrent()

{

return current;

}

public void setCurrent(int current)

{

this.current = current;

}

public int getNext()

{

return next;

}

public void setNext(int next)

{

this.next = next;

}

/**

* @param args

*/

public static void main(String[] args)

{

ArrayList<Traitor> circle = new ArrayList<Traitor>();

for (int i = 0; i < 13; i++)

{

Traitor item = new Traitor();

item.current = i;

circle.add(item);

if (i > 0)

{

item.setPreview(circle.get(i - 1).current);

circle.get(i - 1).setNext(item.getCurrent());

}

}

circle.get(12).setNext(circle.get(0).current);

circle.get(0).setPreview(circle.get(12).getCurrent());

Traitor pointer = circle.get(0);

Traitor next = circle.get(1);

Traitor preview = circle.get(12);

int counter = 0;

while (true)

{

if (pointer.getCurrent() == pointer.getPreview()

&& pointer.getCurrent() == pointer.getNext())

{

System.out.println(pointer.getCurrent() + 1);

break;

}

counter++;

pointer = next;

Boolean isFoundPreview = false;

Boolean isFoundNext = false;

for(int j = 0; j < circle.size(); j ++)

{

if(circle.get(j).getCurrent() == pointer.getPreview())

{

preview = circle.get(j);

isFoundPreview = true;

}

if(circle.get(j).getCurrent() == pointer.getNext())

{

next = circle.get(j);

isFoundNext = true;

}

if(isFoundPreview && isFoundNext)

{

break;

}

}

if (counter % 3 == 0)

{

counter = 0;

preview.setNext(next.getCurrent());

next.setPreview(preview.getCurrent());

circle.remove(pointer);

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: