`
shenyu
  • 浏览: 122577 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数组练习2

阅读更多

现在游戏规则如下:

500个小孩首尾相连拉成一个圆圈,从第0个小孩起,依次报数,每当数到3,该小孩退出圈,下一个小孩接着从1开始报数。如此下去圈中的小孩越来越少,求最后一个小孩是哪一个。

代码采用两种方法解决这个问题。

代码如下:

class Children {
	public static void main(String[] args) {
		play2();
		play1();
	}
	
	public static void play1() {	//算法一
		boolean[] a = new boolean[500]; //false表示在圈子里面
		int count = 0; //数数计数器
		int pos = 0; //下标计数器
		int total = a.length; //人数

		while(total != 0) {
			if(!a[pos]) count++;	//如果小孩在圈内,则数数计数器增加
			if(count == 3) {	//如果到3
				a[pos] = true;	//小孩出去
				count = 0;	//数数技术器归0
				total--;	//总人数--
			}
			pos++;	//下标右移
			pos %= a.length;	//处理越界问题
		}
		System.out.println(--pos == -1? a.length - 1:pos);
	}
	public static void play2() {	//算法2
		//初始化小孩数组,每个小孩指向下一个小孩坐标
		int[] a = new int[500];		
		for(int i=0; i<a.length; i++) a[i] = (i+1)%a.length; 

		int current = 0;	//记载当前位置
		int previous = a.length-1;	//	//记载前一个位置
		int count = 1;	//计数器
		while(previous != current) { //前一个小孩和当前小孩是同一个的时候结束循环
			//向后面数数
			previous = current;	
			current = a[current];
			//如果数到3的倍数,则将前一个小孩指向当前小孩的下一个小孩下标位置
			if(++count%3 == 0) a[previous] = a[current]; 
		}
		System.out.println(current);
	}
}
 
3
2
分享到:
评论
1 楼 run_xiao 2008-08-06  
约瑟夫环问题,我记得在哪里看到过有个超简单的算法解这个问题的,不过需要做一次数学的变化,不过具体怎么做的不记得了

相关推荐

    Java基础--数组练习2

    Java基础之数组练习2

    Java数组练习题(带答案).doc

    Java数组是Java编程语言中的基本数据结构之一,用于存储固定数量的同类型元素。...以上是对Java数组练习题中的主要知识点的详细解析,通过这些题目,可以更好地理解和掌握Java中数组的操作、特性以及异常处理。

    c++数组练习题

    c++数组练习题及答案。本套练习题包含了数组的各方面知识,题型包括判断题 填空题,编程题等

    c语言数组练习题及答案

    该函数在数组`a[]`中查找连续五个元素均为奇数的情况,如果找到则选取其中最小的元素,并将这些最小元素存入`b[]`数组中,然后对该数组进行升序排序。 **解题思路**: - 遍历数组,检查每五个元素是否都是奇数。 - ...

    数组练习javascript

    数组练习

    数组练习javascript-2

    数组练习javascript-2

    C语言数组练习题[1].pdf

    从提供的文件内容来看,文档是关于C语言数组的练习题目,其中包含了一定数量的数组定义、初始化、输入输出以及多维数组的使用等基础知识点。以下是对文件内容的详细解读: 1. 数组定义与声明: 文档中出现了不同...

    数组练习javascript-3

    数组练习javascript-3

    Java 数组练习

    在这个"Java 数组练习"中,我们主要关注的是如何在Java中创建、初始化、操作和理解数组。下面将详细介绍Java数组的相关知识点。 1. **数组定义与声明** 在Java中,数组可以通过指定数据类型和长度来声明。例如,...

    C语言数组练习题

    C语言数组部分练习题的选择题,带答案,适合初学者对数组部分的练习使用。

    C语言二维数组编程练习

    2. **遍历数组**:使用for循环遍历二维数组的所有元素,进行简单的操作,如打印或计算。 3. **指针操作**:使用指针遍历数组,或者将数组传递给函数,通过指针参数进行操作。 4. **函数应用**:定义函数来实现特定...

    数组_本地留言板_H5数组例题_数组练习_

    数组练习通常包括理解和应用数组的各种操作,比如遍历数组、查找特定元素、排序数组、合并两个数组等。例如,你可以被要求编写一个函数,找出数组中的最大值,或者实现一个简单的搜索算法,找到特定的留言。 对于...

    Java数组练习题带答案.doc

    Java 数组练习题带答案 Java 数组是一种基本的数据结构,用于存储固定大小的同类型元素的集合。本文通过多种练习题和答案,帮助读者更好地理解 Java 数组的概念和应用。 1. 数组元素的访问 数组的元素可以通过...

    labview数组使用练习题

    题目:1 用for循环产生4行100列的二维数组,数组成员如下: 1,2,3.......100;...从这个数组中提取2行50列的二维数组,数组成员如下: 50,49,48......1; 56,57,58......105 将这2个数组用数组显示件显示在前面板.

    数组练习题Subject:数组

    数组练习题总结 数组是一种基本的数据结构,广泛应用于各种编程语言中。在 Java 中,数组是用于存储一组相同类型的元素的集合。下面是数组练习题的总结: 1. 排序算法 在数组练习题中,我们遇到了排序算法的应用...

    数组练习.zip

    数组练习.zip文件很可能是为了帮助学习者提升对数组的理解和操作能力而设计的一系列练习。在这个练习中,你可能会遇到各种与数组相关的编程问题,包括但不限于初始化、遍历、查找、排序、插入、删除等。 数组是一种...

    一维数组题目8道题带答案

    在这个“一维数组题目8道题带答案”资源中,我们可以期待找到一系列与一维数组相关的练习题,旨在帮助学习者理解和熟练掌握在Unity C#环境中操作数组的技巧。 1. **数组的基本概念**: - 一维数组是线性数据结构,...

    数组练习.sln

    数组练习.sln

    JAVA数组练习

    适合初学者学习操作JAVA数组

    对象数组练习题.doc

    "JavaSE对象数组练习题" 本资源是一个JavaSE练习题,旨在帮助学习者熟悉Java编程语言的基本概念和对象数组的处理。下面是对该练习题的详细解释和知识点总结。 知识点1:学生类Student 在本练习题中,首先需要定义...

Global site tag (gtag.js) - Google Analytics