日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【JAVA】逢三退一的第二种思路(面向对象)

發布時間:2023/12/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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】逢三退一的第二种思路(面向对象)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。