500个小孩手拉手围成一圈,数一、二、三数到三的小孩退出,手拉手三数,理解面向对象的编程思想,
分享于 点击 26428 次 点评:19
500个小孩手拉手围成一圈,数一、二、三数到三的小孩退出,手拉手三数,理解面向对象的编程思想,
理解面向对象的编程思想,500个小孩手拉手围成一圈,数一、二、三数到三的小孩退出,问最后剩下的小孩是第几个小孩。
package com.taoniwu;public class Test3Quit3{ //500个小孩拉成一个圈,1、2、3数到3的孩子退出 public static void main(String[] args){ KidCircle kc = new KidCircle(500); int num = 0; Kid k = kc.first; while(kc.count>1){ num++; if(num == 3){ kc.delete(k); num = 0; } 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(); } } public void add(){ Kid k = new Kid(); k.id = count; if(count<=0){ first = k; last = k; k.left = k; k.right = k; } else{ k.left = last; k.right = first; last.right = k; first.left = k; last = k; } count++; } public void delete(Kid d){ if(count<=0){ return; } else if(count ==1){ first = last = null; } else{ d.left.right = d.right; d.right.left = d.left; if(d == first){ first = first.right; } else if(d == last){ last = last.left; } } count--; } }//该片段来自于http://byrx.net
用户点评