,获取当前日期:java.util.Date;
数三退一算法:
/*面向对象的思路,考虑问题域中的名词作为类,然后考虑每个类需要什么
属性*/
public class Count3Quit3 {
public static void main(String[] args) {
KidCircle c = new KidCircle(500);
int countNumber = 0;
Kid k = c.first;
while(c.count > 1) {
countNumber++;
if(countNumber == 3) {
countNumber = 0;
c.delete(k);
}
k = k.right;
}
System.out.println(c.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) {
first = k;
last = k;
k.left = k;
k.right = k;
}
else {
last.right = k;
k.left = last;
first.left = k;
k.right = first;
last = k;
}
count++;
}
void delete(Kid k) {
if(count <= 0) {
System.out.println("No Kid");
}
else if(count == 1) {
first = last = k;
}
else {
//k左边人的右手拉住了k的右边,k的右边人的左手
//拉住了k的左边。
k.left.right = k.right;
k.right.left = k.left;
if(k == first) {
first = k.right;
}
else if(k == last) {
last = k.left;
}
}
count--;
}
}