约瑟夫环数数
題目:
有n個孩子站成一圈,從第一個孩子開始順時針方向報數(shù),報到3的人出列,下一個人繼續(xù)從1報數(shù),直到最后剩下一個孩子為止。問剩下第幾個孩子。
(另一種題型 -> 約瑟夫環(huán) -> 遞歸算法 ??http://www.cnblogs.com/yangyh/archive/2011/10/30/2229517.html)
分析:
數(shù)到3的人退出,可暫將此人的去留狀態(tài)修改。
正確代碼:
寫法1:
1 public static void main(String[] args) { 2 // n為在對人數(shù),out為當(dāng)前出列的人 3 int n=0,out=0; 4 Scanner sc = new Scanner(System.in); 5 int aa = sc.nextInt(); 6 int[] a = new int[aa]; 7 8 while(true){ 9 for (int i = 0; i < a.length; i++) { 10 if(a[i]==0){ 11 n++; 12 if(n==3){ 13 a[i]=1; 14 n=0; 15 out++; 16 if(out==aa){ 17 // 直接顯示最后一個人 18 System.out.println(i+1); 19 } 20 // 顯示過程中每次出列的人 21 // System.out.println("出列:"+(i+1)); 22 } 23 } 24 } 25 if(out==aa) break; 26 } 27 }?寫法2(ZB):
public class Yuesefu {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int [] arr = new int[n];int count = 0;int sum = 0;for (int i = 0; sum < arr.length -1; i++) {if (i==arr.length) {i = 0;}if (arr[i] == 0) {count ++; }if (count == 3) {arr[i] = 1;count = 0;sum++;}}for (int i = 0; i < arr.length; i++) {if (arr[i] == 0) {System.out.println(i+1); }}} }?
轉(zhuǎn)載于:https://www.cnblogs.com/sweetheartly/p/5777697.html
總結(jié)
- 上一篇: IP大时代下,网络枪机技术发展现状
- 下一篇: ppt flash无法播放解决方法