1. 程式人生 > >數三退一問題 java

數三退一問題 java

public class Count3Quit {
	
	public static void main (String[] args) {
		boolean [] arr = new boolean [12580];
		int leftNum = arr.length;
		int flag = 0;
		int index = 0;
		
		for(int i = 0; i < arr.length; i++) {
			arr[i] = true;
		}
		
		while (leftNum > 1) {
			if(arr[index] == true) {
				flag++;
				if(flag == 3) {
					flag = 0;
					arr[index] = false;
					leftNum--;
				}
			}
			
			index++;
			
			if(index == arr.length)
				index = 0;
		}

		for(int i = 0; i < arr.length; i++) {
			if(arr[i] == true)
				System.out.println(i);
		}
		
	}
	
}
<pre name="code" class="java">以上有參考尚學堂 馬士兵老師的程式碼,純粹是陣列那方面的知識
接著是一種利用面向物件思想的解決辦法,把500個數字看成是500個小人

</pre><pre name="code" class="java"><pre name="code" class="java">public class Count3Quit2 {
	
	public static void main (String[] args) {
		KidCircle kc = new KidCircle(500);
		int flag = 0;
		Kid k = kc.first;
		
		while(kc.count > 1) {
			flag++;
			if(flag == 3){
				kc.delete(k);
				flag = 0;
			}
			k = k.right;
			
		}
		
		System.out.println(kc.first.id);
		
	}
	
}

class Kid {
	int id;
	Kid left;
	Kid right;
	
}

class KidCircle {
	int count = 0;
	Kid first;
	Kid last;
	
	KidCircle (int n) {
		for(int i = 0; i < n; i++)
			add();
	}
	
	void add () {
		Kid k = new Kid();
		k.id = count;
		
		if (count <= 0) {
			k.left = k;
			k.right = k;
			first = k;
			last = k;
		}
		
		else {
			last.right = k;
			first.left = k;
			k.left = last;
			k.right = first;
			last = k;
		}
		
		count ++;
	}
	
	void delete(Kid k) {
		if (count <= 0)
			return;
		
		else if (count == 1) {
			last = first = null;
		}
		
		else {
			k.left.right = k.right;
			k.right.left = k.left;
			
			if (k == first) {
				first = k.right;
			}
			else if (k == last) {
				last = k.left;
			}
		}
		
		count --;
	}
	
	
	
}

簡直碉堡

相關推薦

JAVA退問題的解決

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

退問題 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

退問題---php

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

寫著玩兒:退

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

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

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

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

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

小白筆記----JAVA小程式(來自馬士兵視屏)

public class Count3Qiut2 { public static void main(String[] args) { KidCircle kc = new KidCircle

java程式碼面向物件實現:500人圍成圈,3退,求最後留下的人的最初位置

 public class TestCycle3{  public static void main(String[] args){   KidCycle cycle = new KidCycle(500);   Kid k= cycle.first;   int j=

ElasticSearch學習筆記之 JAVA Client 之 GET APIs

ElasticSearch學習筆記之三十一 JAVA Client 之 GET APIs Get API Get Request Optional arguments(引數配置) Synchronous Execution(同步執行)

2019合工大超越五套卷數全五套+模擬PDF

共創 圖片 技術 RoCE 51cto com img href term 資源鏈接:https://pan.baidu.com/s/1HU4UJKnL87qWnkcFu8JWBg合工大超越考研數學模擬卷數一全五套PDF以及數三模擬一PDF,分享給大家!超越模擬卷較共創模擬

“全棧2019”Java章:二維組和多維組詳解

inf 基礎 公眾號 方式 www 適合 語法 文章 公眾 難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文鏈接 “全棧2019”Java第三十一章:二維數組和多維數組詳

java陣列經典題目:3退1;每到3就退出個人,求最後剩下個人的編號;

import java.util.Arrays; public class Tes {     public static void main(String[] args) {         // 數3退1;每數到3就退出一個人,求最後剩下一個人的下標;         

JAVA-初步認識-第六章-二維組-另種定義方式

包括 [1] 元素 個數 初步 數組 http length nbsp 一. 對於二維數組而言,我們該怎麽獲取它的長度,包括裏面一維數組的長度。 想打印二維數組中角標為1的一維數組的長度。System.out.print(arr[1].length),其實就是元素個數。

Java淺談組(

spa bound pan .... exceptio 運行 輸出 結構 語法 數組: 編程語言中最常見的一種數據結構,數組就是內存中一段連續的存儲空間。可以用於存儲多個數據,每個數組元素存放一個數據,通常可通過數組元素的索引來訪問數組元素。 1.java數組:   具有相

day20 java 語言中的讀取寫入據(

day20 java 語言中的讀取寫入數據(一)day20 java 語言中的讀取寫入數據(一)一、io概述 io數據流的讀寫功能,在實際的生活中也很常見,比如文件的上傳、下載,日誌的自動更新等都與io讀寫密切相關。io又被分為了讀取數據和寫入數據兩個大的功能。下面就來看看讀取數據的幾種類。二、讀取

C之組參和指針參

C語言 數組參數 指針參數 我們在前面講了在 C 語言中,數組參數會退化為指針。那麽這是為什麽呢?在 C 語言中只會以值拷貝的方式傳遞參數,當向函數傳遞數組時,不是將整個數組拷貝一份傳入函數而是將數組名看做常量指針傳數組首元素地址。 那麽當初在設立 C 語言時,主要是

Java 組 之

人生 ray AI 插入 args 字符 AS KS TE http://www.verejava.com/?id=16992640551624 /* 數組分類 1. 一維數組 1.1 一維數組的定義和初始化 1.2 對一維數組的操作, 遍歷,添加,插入,修

Java 組 之 組 選擇排序算法

core 排序 stat clas 選擇排序 HR pub ring != http://www.verejava.com/?id=16992690199232 /* 用選擇排序: 思路: 1. 將數組中剩下的沒有排序的元素中選出最小的一個, 插入已經排序的後面 *

Java 組 之 組 插入排序算法

emp temp 比較 一維數組 元素 TP 數組 java In http://www.verejava.com/?id=16992686811331 /* 用插入排序: 思路: 1. 在數組中 取未排序的新元素, 跟已經排序的元素比較, 如果新元素小於已排序的元