继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

约瑟夫环问题注释和代码暂存

一嵩寒
关注TA
已关注
手记 4
粉丝 2
获赞 14

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

}

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP