
package com.company;
import java.util.*;
//程式目的:用面向物件的方式實作隔三取一;n個小孩圍成一個圈,從第一個小孩報數(1,2,3),當一個小孩報3時則把它踢出圈外,直到剩下一個人
class Kid {//小孩類
int id;
Kid right;//右邊的小孩
Kid left;//左邊的小孩
public void setId(int Id) {//給ID賦值,并將right,left初始化
id = Id;
right = null;
left = null;
}
}
class Quan {//圈類
int count = 0;//記錄圈中還有多少人
Kid first;//記錄第一個小孩
Kid last;//記錄最后一個小孩
public void deleteKid(Kid a) {//洗掉小孩,當小孩報數為三時
if (count != 0) {
if (count >= 1) {
a.right.left = a.left.right;
a.left.right = a.right.left;
a = a.right;
if (a.id == first.id) first = a.right;
if(a.id == last.id) last = a.left;
} else {
first = null;
last = null;
}
count -= 1;} else System.out.println("沒有人了,不能再洗掉了");
}
public void creatQuan(Kid a) {//把小孩圍成一個圈
if(count == 0) {
first = a;
last = a;
}
else {
last.left = a;
a.left = first;
last=a;
}
count++;
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Kid kid = new Kid();
Quan quan = new Quan();
for (int i = 1; i <= n; i++) {
kid.setId(i);//給ID賦值
Kid kid = new Kid();
quan.creatQuan(kid);//添加一個小孩
}
n = 1;
kid = quan.first;
while (quan.count > 1) {
if (n == 3) {
quan.deleteKid(kid);
n = 1;
}
else {
n = n + 1;
kid = kid.right;
}
}
System.out.println(kid.id);
}
}
uj5u.com熱心網友回復:
想知道報錯的原因以及怎么修改代碼,謝謝了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/177104.html
標籤:Java相關
上一篇:阿里云服務器部署和配置
下一篇:深入分析String類
