java代码实现瑟夫环问题

瑟夫环问题:

问题描述
  一群人围在一起,由第一个人从一开始报数,直到有人报到三,报到三的人出局,剩下的人继续从一开始报数报到三的人出局,以此循环往复直到这一圈人只剩下一个人游戏结束。

问题分析
  1.要完成这个游戏首先要所有人围成一圈,这样才可以按照出局规则一直循环下去这个,我们可以定义一个ArrayList集合用来存储游戏中的所有玩家,再定义一个变量index来表示当前报数玩家在圈中的位置。用循环实现index从0开始一直到最后一个下标。当index到最后一个下标的时候就让index等于0以此来模拟一群人围在一起的环。
  2.实现了一个环结构后就可以在其中编写规则了首先是从一开始报数,首先定义一个变量number然后,让number每一次循环都自增一。直到number==3这时就应该移出ArrayList中当前下标(index)的元素
并且让number等于一(因为移出ArrayList当前元素会使得之后的元素向前移动填补当前空位,所以下一次的报数还应该从当前下标开始)然后continue跳出本次循环并且从跳出循环前的下标开始下一次的报数。
  3.游戏总有结束的时候,所以这个循环也应该有个终止条件。这个循环的终止条件很简单,当ArrayList.size()为一的时候就可以终止了。换言之当ArrayList.size()>1是可以继续循环的条件。
代码实现

import java.util.ArrayList;
import java.util.List;

public class LianXi01 {
	public static void main(String[]args){
		int index = 0;
		int number = 1;
		List<Integer> list = new ArrayList();
		//这个循环用来给ArrayList中的元素赋值为了方便辨认获胜者是哪一位所以从1开始
		for(int i=1;i<=15;i++){
			list.add(i);
		}
		System.out.print("出局的顺序:");
		//在这里游戏正式开始
		while(list.size()>1){
		//这个用来判断当前下标是否超出集合最大下标(也就是说是否该重新从第一个人开始报数)
			if(index>list.size()-1){
				index=0;
			}
			//这个用来判断报的数是否到达3
			if(number==3){
				System.out.print(list.get(index)+" ");
				list.remove(index);
				number=1;
				continue;
			}
			
			number++;
			index++;
		}
		//因为集合中只剩下了一个人所以0下标就是剩下的那个人,直接输出即可
		System.out.print("游戏结束第"+list.get(0)+"人胜利");
	}
}

运行结果:出局的顺序:3 6 9 12 15 4 8 13 2 10 1 11 7 14 游戏结束第5人胜利

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值