class Count3Quit2
{
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 right;
Kid left;
}
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.right=k;
k.left=k;
}
else
{
k.left=last;
k.right=first;
last.right=k;
first.left=k;
k=last;
}
count++;
}
void delete(Kid k)
{
if(count<=0)
{
return;
}
else if(count==1)
{
last=first=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--;
}
}
------解决方案--------------------
public class Count3Quit2 {
public static void main(String[] args) {
int kids = 500;
int quiteNum = 3;
boolean[] quiteFlag = new boolean[kids];
for (int i = 0; i < quiteFlag.length; i++) {
quiteFlag[i] = false;
}
int pos = -1;
for (int i = 0; i < 500; i++) {
for (int j = 0; j < quiteNum; j++) {
while (true) {
pos++;
if (pos >= kids) {
pos = 0;
}
if (!quiteFlag[pos]) {
break;
}
}
}
quiteFlag[pos] = true;
System.out.printf("第%d次第%d个小孩退出\n", i + 1, pos + 1);
}
}
}
这是我写的一个程序,直接用一个标志数组和循环来实现的,没搞你那么多类和方法。
------解决方案--------------------
不好意思,改了一下
public class Count3Quit2 {
public static void main(String[] args) {
int kids = 500;
int quiteNum = 3;
boolean[] quiteFlag = new boolean[kids];
for (int i = 0; i < quiteFlag.length; i++) {
quiteFlag[i] = false;
}
int pos = -1;
for (int i = 0; i < kids; i++) {
for (int j = 0; j < quiteNum; j++) {
while (true) {
pos++;
if (pos >= kids) {
pos = 0;
}
if (!quiteFlag[pos]) {
break;
}
}
}
quiteFlag[pos] = true;
System.out.printf("第%d次第%d个小孩退出\n", i + 1, pos + 1);
}
}
}
for循环中写了一个500的常量,实际应该用kids。