隨筆 - 78  文章 - 25  trackbacks - 0
          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿

          隨筆分類(75)

          隨筆檔案(78)

          相冊

          實用Links

          我的Links

          搜索

          •  

          積分與排名

          • 積分 - 114330
          • 排名 - 515

          最新評論

          閱讀排行榜

          評論排行榜

          由m個人圍成一個首尾相連的圈報數。從第一個人開始,從1開始報數,報到n的人出圈,剩下的人繼續從1開始報數,直到所有的人都出圈為止。對于給定的m和n,求出所有人的出圈順序.

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

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

          FeedBack:
          # re: java實現約瑟夫環問題 2013-01-16 21:47 韓雪
          你的java約瑟夫環問題我看懂了??!寫的挺好的。我是菜鳥級別的希望以后多請教了  回復  更多評論
            
          # re: java實現約瑟夫環問題[未登錄] 2014-01-02 09:02 bobo
          寫的非常好  回復  更多評論
            
          # re: java實現約瑟夫環問題[未登錄] 2014-03-20 21:54 ccc
          思路很清晰,很好理解  回復  更多評論
            
          # re: java實現約瑟夫環問題 2015-07-18 15:11 re
          注釋清楚,可以直觀地理解思路,贊。  回復  更多評論
            
          主站蜘蛛池模板: 苍梧县| 漯河市| 康保县| 富蕴县| 年辖:市辖区| 徐汇区| 垣曲县| 枝江市| 铁岭县| 莱州市| 察哈| 宿州市| 宽城| 镶黄旗| 邵阳市| 塘沽区| 秦皇岛市| 白山市| 许昌县| 彰武县| 罗江县| 边坝县| 惠水县| 六枝特区| 北海市| 洪江市| 顺昌县| 高尔夫| 五河县| 芮城县| 玉门市| 鹿泉市| 罗江县| 收藏| 梅州市| 新和县| 陆川县| 铜梁县| 吉木萨尔县| 化隆| 麻栗坡县|