程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java-下面約瑟夫環代碼中k的等式怎麼理解?

java-下面約瑟夫環代碼中k的等式怎麼理解?

編輯:編程綜合問答
下面約瑟夫環代碼中k的等式怎麼理解?

package com.seqlist;

import java.util.*;

public class yuesefu {

/**
 * @約瑟夫環
 * 總人數 totalnum
 * 數到幾  countnum
 * 第幾個出列 k
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int totalnum=11;
    int countnum=6;
    List<Integer> list=new ArrayList();
    //初始化人數
    for(int i=1;i<=totalnum;i++){
        list.add(i);
    }
      int  k=0;
    //開始數數了
    while(list.size()>0){
        //確定出列值k
        k=k+countnum;
        //k的最後一個數 ???
        k=k%list.size()-1;
        //判斷是否隊尾,k在隊伍最後一個數時會有k<0
        if(k<0){
            //處於隊尾元素
            System.out.println(list.get(list.size()-1));
            list.remove(list.size()-1);
            k=0;
        }else{
            //
            System.out.print(list.get(k)+" ");
            list.remove(k);
        }
    }
}

}


最佳回答:


今天也有一個同學問約瑟夫問題,看到這個好像明白了。其實這個K可以理解為數數開始時前面有幾個人,每次循環的時候需要計算從第幾個人開始數,然後加上數到幾刪掉一個,這個時候有可能已經從末尾回到最前面了,因此要進行取模運算。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved