java丟手帕 約瑟夫問題

1、問題描述: 
    n我的圍成一個圈,編號爲1~n,從第一號開始報數,報到3的倍數的人離開,一直數下去,直到最後只有一我的,求此人編號。 

2、問題提示: 

     使用一維數組,數組元素初始爲1,從1開始把數字放進數組空間,若數組元素爲3的倍數,則把其置0,循環下去直到計數器(counter)減爲1,則跳出循環並輸出其數組下標 

java

Java代碼   收藏代碼
    1. import java.util.Scanner;  
    2.   
    3. public class Test {  
    4.   
    5.     /** 
    6.      * @param args 
    7.      */  
    8.     public static void main(String[] args) {  
    9.         // TODO Auto-generated method stub  
    10.   
    11.         System.out.println("請輸入一個數字:");  
    12.         Scanner scan = new Scanner(System.in);  
    13.         int n = scan.nextInt();  
    14.         int counter = n;// 計數器  
    15.         int num = 1;// 數數  
    16.         int[] array = new int[n];// 聲明數組  
    17.   
    18.         for (int i = 0; i < array.length; i++) {// 數組初始化  
    19.             array[i] = 1;  
    20.         }  
    21.         while (counter > 1) {  
    22.             for (int j = 0; j < array.length; j++) {  
    23.                 if (array[j] != 0) {// 若是數組元素不爲0,則從1開始賦值  
    24.                     array[j] = num;  
    25.                     if (num % 3 == 0) {// 若是賦給數組元素的數可以整除3,則把此數組元素置0,計數器減1(即踢掉一我的)  
    26.                         array[j] = 0;  
    27.                         counter = counter - 1;  
    28.                         if (counter == 1) {// 若是最後只剩下一我的,跳出循環  
    29.                             break;  
    30.                         }  
    31.                     }  
    32.                     num = num + 1;  
    33.                 }  
    34.             }  
    35.         }  
    36.         for (int k = 0; k < n; k++) {  
    37.             if (array[k] != 0) {  
    38.                 System.out.println("最後贏家的編號爲:" + (k + 1));  
    39.             }  
    40.         }  
    41.   
    42.     }  
    43.   
    44. }  
相關文章
相關標籤/搜索