1. 程式人生 > >【JAVA】數三退一問題的解決

【JAVA】數三退一問題的解決

數三退一:

500個小孩手拉手圍成一圈,從第一個小孩開始數數,按照1、2、3、1、2、3迴圈不斷的數,數到3的小孩退出圈,其他小孩接著數,直到剩下一個小孩,問這個小孩的排在什麼位置?

思路分析:可以定義一個布林型的陣列,用來存放500個小孩,若為true,代表在圈內,若為false,則代表出圈。首先,每個小孩都在圈內(即陣列中的元素都賦值為true),從第一個小孩開始數,首先判斷其是否在圈內,若在,繼續數(countNum自加1),若不在,忽略掉他的存在,從下個小孩接著數,當數到3時,這個小孩定義為false,剩餘小孩的的數目自減1,知道剩一個小孩。

問題解決:

public class Count3Quit {

 public static void main(String[] args) {

 boolean[] arr = new boolean[500];   //布林型陣列,true表示還在,false表示退出。

 for(int i=0; i<arr.length; i++) {

                     arr[i] = true;

              }

 int leftCount = arr.length;    // 剩下的人數,初值為500

 int countNum = 0;   // 幾個人一輪

 int index = 0;     //數到第幾個人

 while(leftCount > 1) {     //只要剩餘人數大於1,就繼續數

 if(arr[index] == true) {   // 若數到第index個人,此人沒有退出,就繼續數

                            countNum++;

 if(countNum ==3) {    //數到3,此小孩出圈

                                   countNum = 0;

                                   arr[index] = false;

                                   leftCount --;

                            }

                     }

                     index ++;

 if(index == arr.length) {

                            index = 0;

                     }

              }

 for(int i=0; i<arr.length; i++) {

 if(arr[i] == true) {

                            System.out.println(i);

                     }           

              }

       }

}


相關推薦

JAVA退問題的解決

數三退一: 500個小孩手拉手圍成一圈,從第一個小孩開始數數,按照1、2、3、1、2、3迴圈不斷的數,數到3的小孩退出圈,其他小孩接著數,直到剩下一個小孩,問這個小孩的排在什麼位置? 思路分析:可以定

JAVA退的第二種思路(面向物件)

提供第二種思路: 題目:500個小孩手拉手圍成一圈,每個小孩有一編號,數數,當數到第三個時,將該小孩刪除,求最後剩下的那個小孩是這500個小孩中的第幾個。 面向物件程式設計,首先分析,有多少個物件? 兩個。 1.小孩 成員特點: a.需要有編號 b.圓圈,需要有左孩子,l

退問題 java

public class Count3Quit { public static void main (String[] args) { boolean [] arr = new boolea

退 二種方式的演算法 Java

數三退一,就是指很多個小朋友圍成一個圈,從第一個開始數1.2.3. 第三個小朋友就退出 這個圈,以此類推。第一種方法,以面向過程的方式,此程式的案例十500個小朋友,public class Count3Quit {public static void main(String

Java組使用

++ new div pac pri clas sta [] pub package aaa; public class aaa { public static void main(String args[]) {

java據類型

相互 需要 long 3.2 方式 強制 boolean als src 邏輯型boolean: boolean類型數據只能取值True或False,不可以0或者非0替代True或False,這點與c語言不同。 字符型char: 一個char類型的字符占兩個字節。表示方式

Java組知識回顧

arraycopy h+ sta 指定位置 rcp pri pre 元素 argument package another; import java.util.Arrays; import java.util.List; /** * 數組知識回顧 * @autho

JavaJSOUP請求JSON 及解決jsoup不能完整獲取響應內容的問題

用JSOUP來請求介面,構造請求頭的時候非常方便。程式碼如下: Document doc = Jsoup .connect(Constant.DATA_URL) .timeout(10000).get(); Element body = doc.body(); JSONObject js

java簡單的傳送段資料到串列埠

可以跟著一起操作。 2 給專案新增外部jar(有eclipse和intellij兩種IDE操作方式說明) 2.1 假設你用eclipse 2.2 使用intellij 3 新增dll 將dll檔案複製到jdk和jre的b

Java廣州本秋招經歷

前言 只有光頭才能變強 離上次發文章已經快兩個月時間了,最近一直忙著秋招的事。今天是2018年10月22日,對於網際網路行業來說,秋招就基本結束了。我這邊的流程也走完了(不再筆試/面試了),所以來寫寫我的秋招經歷吧~ 這次的秋招可謂收穫很多: 成功收到了4399、唯品會等幾十家公司的感謝信,成功加入人才

JavaMD5工具類,解決中文轉MD5不一致問題。

import java.security.MessageDigest; public class MD5Util { /** * * @Title: MD5 *

Java字串種空字串null、new String()、""的區別

      今天寫個DEMO的時候碰到了個小麻煩,有關於題目所說的字串這三者的區別,我覺得我真的是夠了,居然會用得這麼細,不過會了也好,碰到相關的問題就可以一言不合程式碼就開寫!       既然研究,那就從結果說起,來看測試程式碼和輸出結果: // 測

退問題---php

<?php   class kid {    public $left;    public $right;     public $id;    function __construct($f) {     $this->id=$f;    }  }  

Java)運算子小結(比較、邏輯、三元運算子)

        前面介紹的兩種運算子都比較簡單,下面我們來看一下比較複雜一點的三種運算子:比較運算子、邏輯運算子、三元運算子。         一、比較運算子 又叫關係運算符,用於判斷兩個被運算元的

寫著玩兒:退

/** *500個小孩兒,每次數三個人,第三個人離開。 *最後剩下的是第幾個小孩兒 *數三退一 */ public class Count3Quit { public static void mai

java逢3退1小練習

public class Count3Quit { public static void main (String[] args){ boolean [] arr = new boolean[500]; int len = arr.length;

五百個小孩,退,最後留下的是多少號

/** * 數三退一 * @author Lei * @version 建立時間:2009-8-17 上午11:13:18 */public class Count3Quit { public static void main(String[] args) {  KidCir

java啤酒程序

ott round bottle 圖片 args ring around 分享圖片 system public class BeerSong{ public static void main(String[] args){ int beerNum = 99; S

Java入門基礎(

Java的歷史1995年,Oak語言更名為Java,Sun公司在Sun world會議上正式釋出Java和HotJava瀏覽器。1996年,Sun公司釋出了Java的第一個開發工具包(JDK 1.0)

【Java】【演算法練習輸入一個正整數陣列,把組裡所有數字拼接起來排成個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這個數字能排成的最小數字為321323。

題目描述:         輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列 {3,32,321},則打印出這三個數字能排成的最小數字為321323。 解題思路:        解題思路: 比較兩個字串s1 S2的