【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】逢三退一的第二种思路(面向对象)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打字测试结果
- 下一篇: 用计算机怎么算二进制数,计算机上的二进制