package yuesefu.oneslide;
public class xuesefu {
/**
* @param args
* 约瑟夫环问题:
* 求解类型:找到最后一个幸存者的原数组索引。
* 也就是说有这样一份罪犯列表:
* {
* //tuple类型元素,找到幸存者的名字,这样我们可以通过原数组的索引找到这个名字
* [John smith,0]
* [Barry Alan,1]
* [michell white,2]
*
* }
* 首先指定一个犯人,将其赋值于start。
* 定义一个数组首先初始化为从1 2 3 ....count的数组,定义为con
* 两条重要规则:
*1. 数组的值记录的永远是犯人的原编号(第一个数组中的索引)
*2. 数组的索引con1 con2永远记录犯人所报的数
*
* 指定第一个开始报数的犯人的值为1,其索引为start-1
* con[start-1]=1
* 假设获得死刑犯人敏感数为n,即是只要他报到n,那他就死定了,并作为下一个数组的头号节点,当下一个准死刑犯人找到
* 他就会被干掉;
* 作为数组头号节点的处理逻辑:
* 第一次指定是特殊的,因为此犯人不执行死刑。但是第一次他是头号数组元素
* 第一个准死刑犯人的索引:
* con[start-1+n-1]=con[start-n+1]
* 创建一个新的数组con2,用第一个元素来代表准死刑犯人;
* 此时应将start保存第一个准死刑犯人:start=start-n+1以便传入函数con1
* con2[0]=start
* con2[1]=start+1
* ...
* 找到下一个准死刑犯人:
*
* con2[n]=start+n<count(犯人总数)
* 如果start>count:
*
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
int[] deal(int[] arr1,int count,int n,int start){
//count是犯人数目,n是中奖死刑,规定arr1[0]为中死刑奖的犯人索引
arr1[start-1]=1;//指定犯人的索引
start=start+n-1;
return arr1;
}
int[] con2(int[] arr2,int count,int n,int start){
return arr2;
}
}