数三退一 二种方式的算法 Java

本文介绍了数三退一游戏的两种实现方式:一种是面向过程的方法,通过布尔数组跟踪500个小朋友的状态;另一种是面向对象的方法,使用链表来管理参与游戏的小朋友。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数三退一,就是指很多个小朋友围成一个圈,从第一个开始数1.2.3. 第三个小朋友就退出 这个圈,以此类推。

第一种方法,以面向过程的方式,此程序的案例十500个小朋友,

public class Count3Quit {
public static void main(String[] args) {
boolean []arr=new boolean [500];
for(int i=0;i<arr.length;i++){
arr[i]=true;
}
int leftCount=arr.length;
int countNun=0;
int index=0;
while(leftCount>1){
if(arr[index]==true){
countNun++;
if(countNun==3){
countNun=0;
arr[index]=false;
leftCount--;
}
}
index++;
if(index==arr.length){
index=0;
}
}


for(int i=0;i<arr.length;i++){
if(arr[i]==true){
System.out.println(i);
}
}
}

}


第二种方法是面向对象的思维

public class Count3quit2 {
public static void main(String[] args) {
kidCirle a=new kidCirle(500);
int countNun=0;
kid k=a.frist;
while(a.count>1){
countNun++;
if(countNun==3){
a.delete(k);
countNun=0;
}
k=k.right;
}
System.out.println(a.frist.id);
}
}
class kid{
int id;
kid left,right;
}
class kidCirle{
int count=0;
kid frist,last;

kidCirle(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;
frist=k;
last=k;
}else{
k.right=frist;
k.left=last;
frist.left=k;

last.right=k;
last=k;
}
count++;

}
void delete(kid k){
if(count<=0){
return;
}
if(count==1){
frist=last=null;
}else{
k.left.right=k.right;
k.right.left=k.left;
if(k==frist){
frist=k.right;
}else if(k==last){
last=k.left;
}
}
count--;
}


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值