隨筆 - 78  文章 - 25  trackbacks - 0
          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿

          隨筆分類(75)

          隨筆檔案(78)

          相冊

          實用Links

          我的Links

          搜索

          •  

          積分與排名

          • 積分 - 114328
          • 排名 - 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約瑟夫環問題我看懂了?。懙耐玫摹N沂遣锁B級別的希望以后多請教了  回復  更多評論
            
          # re: java實現約瑟夫環問題[未登錄] 2014-01-02 09:02 bobo
          寫的非常好  回復  更多評論
            
          # re: java實現約瑟夫環問題[未登錄] 2014-03-20 21:54 ccc
          思路很清晰,很好理解  回復  更多評論
            
          # re: java實現約瑟夫環問題 2015-07-18 15:11 re
          注釋清楚,可以直觀地理解思路,贊。  回復  更多評論
            
          主站蜘蛛池模板: 浮山县| 正蓝旗| 资源县| 响水县| 随州市| 五原县| 云安县| 汉沽区| 灵山县| 建瓯市| 三亚市| 萨迦县| 彰武县| 伊宁县| 体育| 全椒县| 上饶市| 许昌县| 中牟县| 梁山县| 敦化市| 赣榆县| 延寿县| 永春县| 新绛县| 大港区| 潼关县| 濮阳县| 漯河市| 中超| 江北区| 高邮市| 米脂县| 南汇区| 玉树县| 兴隆县| 开封县| 华池县| 澎湖县| 阿拉善左旗| 子洲县|