java程式碼面向物件實現:500人圍成一圈,數3退一,求最後留下的人的最初位置
阿新 • • 發佈:2019-02-11
public class TestCycle3{
public static void main(String[] args){
KidCycle cycle = new KidCycle(500);
Kid k= cycle.first;
int j=0;
while(cycle.count>1){
j++;
if(j==3){
cycle.delete(k);
j=0;
}
k = k.right;
}
System.out.println("k.id="+k.id);
System.out.println("cycle.first.id="+cycle.first.id);
}
}
class Kid{
int id;
Kid left;
Kid right;
}
class KidCycle{
int count=0;
Kid first,last;
KidCycle(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;
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(first == k){
first= k.right;
}else if(last ==k ){
last = k.left;
}
}
count--;
}
}
public static void main(String[] args){
KidCycle cycle = new KidCycle(500);
Kid k= cycle.first;
int j=0;
while(cycle.count>1){
j++;
if(j==3){
cycle.delete(k);
j=0;
}
k = k.right;
}
System.out.println("k.id="+k.id);
System.out.println("cycle.first.id="+cycle.first.id);
}
}
class Kid{
int id;
Kid left;
Kid right;
}
class KidCycle{
int count=0;
Kid first,last;
KidCycle(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;
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(first == k){
first= k.right;
}else if(last ==k ){
last = k.left;
}
}
count--;
}
}