隨筆 - 78  文章 - 25  trackbacks - 0
          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿

          隨筆分類(75)

          隨筆檔案(78)

          相冊(cè)

          實(shí)用Links

          我的Links

          搜索

          •  

          積分與排名

          • 積分 - 114328
          • 排名 - 515

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          由m個(gè)人圍成一個(gè)首尾相連的圈報(bào)數(shù)。從第一個(gè)人開(kāi)始,從1開(kāi)始報(bào)數(shù),報(bào)到n的人出圈,剩下的人繼續(xù)從1開(kāi)始報(bào)數(shù),直到所有的人都出圈為止。對(duì)于給定的m和n,求出所有人的出圈順序.

          import java.util.Scanner;
          /**
          *使用數(shù)組實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題
          *由m個(gè)人圍成一個(gè)首尾相連的圈報(bào)數(shù)。
          *從第一個(gè)人開(kāi)始,從1開(kāi)始報(bào)數(shù),報(bào)到n的人出圈,
          *剩下的人繼續(xù)從1開(kāi)始報(bào)數(shù),直到所有的人都出圈為止。
          *對(duì)于給定的m和n,求出所有人的出圈順序.
          */
          public class RingTest{
              
          public static void main(String[] args){
                  System.out.println(
          "程序說(shuō)明如下:");
                  System.out.println(
          "由m個(gè)人圍成一個(gè)首尾相連的圈報(bào)數(shù)。從第一個(gè)人開(kāi)始,從1開(kāi)始報(bào)數(shù),報(bào)到n的人出圈,剩下的人繼續(xù)從1開(kāi)始報(bào)數(shù),直到所有的人都出圈為止。對(duì)于給定的m和n,求出所有人的出圈順序.");
                  
                  
          //提示輸入總?cè)藬?shù)
                  System.out.println("請(qǐng)輸入做這個(gè)游戲的總?cè)藬?shù):");
                  Scanner sca
          =new Scanner(System.in);
                  
          int m=sca.nextInt();
                  
          //提示輸入要出圈的數(shù)值
                  System.out.println("請(qǐng)輸入要出圈的數(shù)值:");        
                  
          int n=sca.nextInt();
                  System.out.println(
          "按出圈的次序輸出序號(hào):");        
                  
          //創(chuàng)建有m個(gè)值的數(shù)組
                  int[] a=new int[m];
                  
          //初始長(zhǎng)度,以后出圈一個(gè),長(zhǎng)度就減一
                  int len=m;
                  
          //給數(shù)組賦值
                  for(int i=0;i<a.length;i++)
                      a[i]
          =i+1;
                  
          //i為元素下表,j代表當(dāng)前要報(bào)的數(shù)
                  int i=0;
                  
          int j=1;
                  
          while(len>0){
                      
          if(a[i%m]>0){
                          
          if(j%n==0){//找到要出圈的人,并把圈中人數(shù)減一
                              System.out.print(a[i%m]+"  ");
                              a[i
          %m]=-1;
                              j
          =1;
                              i
          ++;
                              len
          --;
                          }
          else{
                              i
          ++;
                              j
          ++;
                          }
                      }
          else{//遇到空位了,就跳到下一位,但j不加一,也就是這個(gè)位置沒(méi)有報(bào)數(shù)
                          i++;
                      }
                  }
              }
          }

          posted on 2010-01-15 23:45 期待明天 閱讀(17125) 評(píng)論(4)  編輯  收藏 所屬分類: Java

          FeedBack:
          # re: java實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題 2013-01-16 21:47 韓雪
          你的java約瑟夫環(huán)問(wèn)題我看懂了!!寫(xiě)的挺好的。我是菜鳥(niǎo)級(jí)別的希望以后多請(qǐng)教了  回復(fù)  更多評(píng)論
            
          # re: java實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題[未登錄](méi) 2014-01-02 09:02 bobo
          寫(xiě)的非常好  回復(fù)  更多評(píng)論
            
          # re: java實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題[未登錄](méi) 2014-03-20 21:54 ccc
          思路很清晰,很好理解  回復(fù)  更多評(píng)論
            
          # re: java實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題 2015-07-18 15:11 re
          注釋清楚,可以直觀地理解思路,贊。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 武威市| 会昌县| 拜城县| 宿迁市| 吴忠市| 潢川县| 上林县| 广水市| 剑川县| 玉溪市| 民勤县| 涪陵区| 昭平县| 平邑县| 余姚市| 车险| 闻喜县| 故城县| 彝良县| 永登县| 嘉祥县| 措勤县| 肥城市| 泰和县| 轮台县| 衡南县| 肇东市| 彩票| 繁昌县| 宁夏| 龙泉市| 凤冈县| 清流县| 博罗县| 丹寨县| 耿马| 苗栗市| 江华| 甘谷县| 云龙县| 那坡县|