1. 程式人生 > >【JAVA】逢三退一的第二種思路(面向物件)

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

提供第二種思路:

題目:500個小孩手拉手圍成一圈,每個小孩有一編號,數數,當數到第三個時,將該小孩刪除,求最後剩下的那個小孩是這500個小孩中的第幾個。

面向物件程式設計,首先分析,有多少個物件?

兩個。

1.小孩

成員特點:

a.需要有編號

b.圓圈,需要有左孩子,left和右孩子right

2.小孩圍成的圈

成員特點:

a.每個成員的編號

b.圓圈圍成的第一個孩子first

c.圓圈圍成的最後一個孩子last

有哪些函式:

A.建構函式(傳入一個引數n,即生成多大的孩子圈)

B.新增孩子函式void add()

注意的地方:

1.要判斷新增的是不是圓圈內的第一個孩子

2.新增時,k 與 first/last/ left/right的關係

C.刪除孩子函式void delete(Kid k) 傳入要刪除的孩子

注意的地方:

1.當圓圈內一個人都沒有----直接返回

2.當圓圈內只有唯一一個人----first/last都置為空

3.其他情況

1.刪的是第一個孩子

2.刪的是第二個孩子

main函式

1.生成一個kidcircle物件kc

2.建立kid,將其指定為kc的first

3.建立一個數數的變數countNum,先初始化為0,然後數數,數到3,將其重新置為0,然後呼叫delete()函式

具體程式碼實現:

public class Count3Quit4{


	public static void main (String[] args){

		KidCircle kc = new KidCircle(500);
		int countNum = 0;
		Kid k = kc.first;

		while(kc.count>1){

			countNum ++;
			if (countNum == 3) {
				countNum = 0;
				kc.delete(k);
			}
			k = k.right;
		}

		System.out.println(kc.first.id);


	}
}

class Kid {

	int id;
	Kid left;
	Kid right;
}

class KidCircle {

	int count = 0;
	Kid first,last;

	KidCircle (int n){

		for (int i = 0;i < n; i++){

			add();
		}

	}

	void add(){

		Kid k = new Kid();
		k.id = count;

		if (count <= 0) {
			first = k;
			last = k;
			k.left = k;
			k.right = k;
		}else {

			last.right = k;
			k.left = last;
			k.right = first;
			first.left = k;
			last = k;
		}

		count ++;

	}


	void delete(Kid k) {

		if (count <= 0){
			return;
		}else if (count == 1){

			first = last = 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個小孩手拉手圍成一圈,每個小孩有一編號,數數,當數到第三個時,將該小孩刪除,求最後剩下的那個小孩是這500個小孩中的第幾個。 面向物件程式設計,首先分析,有多少個物件? 兩個。 1.小孩 成員特點: a.需要有編號 b.圓圈,需要有左孩子,l

JAVA退問題的解決

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

java3退1小練習

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

Java基本類型和引用類型值傳遞

適合 and span print pri right bre enc this 【關鍵詞】 【問題】 · 加深對基本類型和引用類型的理解; 【效果圖】 【分析】 參見最後的【參考資料】 【解決方式】 【代碼】 public

Java 大話資料結構(17) 排序演算法(4) 歸併排序 資料結構與演算法合集 資料結構與演算法合集

本文根據《大話資料結構》一書,實現了Java版的堆排序。 更多:資料結構與演算法合集 基本概念   歸併排序:將n個記錄的序列看出n個有序的子序列,每個子序列長度為1,然後不斷兩兩排序歸併,直到得到長度為n的有序序列為止。   歸併方法:每次在兩個子序列中找到較小的那一個賦值給合併序列(通過指標進行操

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

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

Java廣州本秋招經歷

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

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

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

退方式的演算法 Java

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

java對數據庫操作的那些事包含數據庫中的預處理

exception main exc 獲取 bat dba else .class 可維護 一、連接問題 前面剛介紹了怎麽連接數據庫,也寫了對應的模板。可是它的可維護性很差。那麽怎麽解決問題呢? 首先寫一個配置文件jdbc.properties <s

探路者周立會報告1總第13次

工作 logs cor str 內容 實現 產品 問題 cnblogs 【探路者】組成員及各位博客地址。 1藺依銘:http://www.cnblogs.com/linym762/ 2張恩聚:http://www.cnblogs.com/zej87/ 3米赫:http:/

探路者周立會報告6總第18次

str 視頻 ext kanban list es2017 版本控制 成績 今天 【探路者】組成員及各位博客地址。 1藺依銘:http://www.cnblogs.com/linym762/ 2張恩聚:http://www.cnblogs.com/zej87/ 3米赫:h

Java 大話資料結構(18) 排序演算法(5) 直接插入排序 資料結構與演算法合集 資料結構與演算法合集

本文根據《大話資料結構》一書,實現了Java版的直接插入排序。 更多:資料結構與演算法合集 基本概念   直接插入排序思路:類似撲克牌的排序過程,從左到右依次遍歷,如果遇到一個數小於前一個數,則將該數插入到左邊所有比自己大的數之前,也就是說,將該數前面的所有更大的數字都後移一位,空出來的位置放入該數。

MongoDBwindows平臺搭建Mongo資料庫複製集類似叢集

Replica  Sets(複製集)是在mongodDB1.6版本開始新增的功能,它可以實現故障自動切換和自動修復功能成員節點的功能,各個DB之間的資料完全一致,大大降低了單點故障的風險。  【】 以上圖示是三個節點的Replica Set架構。該圖來源於紅丸編寫的《Mo

Java求1到100以內的素數質數

      雖然我們都知道質數的概念:質數又稱素數,是指一個大於1的自然數中,除了1和其自身外,沒法被其他自然數整除的數。我當時蒙圈了,都是哪些數字嘛我還能一一說出來,至於多少個嘛,數一數就好了。可是

PANDAS 數據合並與重塑concat篇

分享 levels 不同的 整理 con 簡單 post ignore num 轉自:http://blog.csdn.net/stevenkwong/article/details/52528616 1 concat concat函數是在pandas底下的方法,可以將數據

轉載Eclipse vs IDEA快捷鍵對比大全win系統

logs 常用 ima idea ref 技術 div log eclipse 花了幾天時間熟悉IDEA的各種操作,將各種快捷鍵都試了一下,感覺很是不錯!以下為我整理了一下開發過程中經常用的一些Eclipse快捷鍵與IDEA的對比,方便像我一樣使用Eclipse多年但想嘗試

CodeforcesCodeforces Round #492 (Div. 2) [Thanks, uDebug!] Contest 996

spl === bsp -- href 分享 printf cli 位置 題目 傳送門:QWQ A:A - Hit the Lottery 分析: 大水題 模擬 代碼: #include <bits/stdc++.h&g

筆記跨域重定向中使用AjaxXHR請求導致跨域失敗

兩個 led stat -h java cut 報錯 blank direct 背景: 1、前端Web中有兩個域名,a.com和b.com,其中a.com是訪問主站(頁面),b.com是數據提交接口的服務器(XHR請求) 2、a.com中用XHR調用b.com/cerate

atcoderAll Your Paths are Different Lengths[arc102D]亂搞

ase owb arc line 傳送門 turn read sed 二進制   題目傳送門:https://arc102.contest.atcoder.jp/tasks/arc102_b   這道題有點毒瘤啊,罰時上天。。   顯然若$ l=2^n $那麽就可以直接