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);
}
}
}
}
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);
}
}
}
}
相关文章推荐
- 【数据结构和算法】【栈】顺序栈的代码实现
- 算法:集合的划分原理及代码实现
- 【字符串处理算法】字符串包含的算法设计及C代码实现【转】
- 结合微软的部分代码再加上自己整理的代码实现的一个我个人觉得很强大的序列化/反序化类
- java单链表实现约瑟夫算法。
- 使用python实现细菌繁殖的算法代码,欢迎拍砖讨论!
- Angularjs实现分页和分页算法的示例代码
- java 算法之希尔排序详解及实现代码
- Matlab实现meanshift算法,目标跟踪代码实现
- 算法 -- Java实现二分(折半)查找(图解 + 代码实现)
- JS维吉尼亚密码算法实现代码
- 约瑟夫问题分析及代码实现
- 聚类方法:DBSCAN算法研究(2)--matlab代码实现
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果
- 【数据结构与算法】【排序】堆排序的代码实现
- 算法导论C语言实现各算法代码集合-第二章
- 基于OpenCV的 SVM算法实现数字识别(四)---代码实现
- 【数据结构与算法】【排序】归并排序的代码实现
- 使用 Node.js 实现图片的动态裁切及算法实例代码详解
- PHP实现的蚂蚁爬杆路径算法代码