`

java-13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。

 
阅读更多
import java.util.ArrayList;
import java.util.List;


public class KickOutBadGuys {

	/**
	 * 题目:13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。
	 * Maybe you can find out the mathematical rule behind the question.
	 * But we try to figure it out in Java.
	 * It's easy to have Circular Linked List in mind.
	 * Of course we can use Java's 'LinkedList'.
	 * But I implement my "Circular Linked List" for practice.
	 */
	
	private static final int MAX=26;
	private static final int STEP=7;
	private static final int NUM=13;//number of bad guys
	
	public static void main(String[] args) {
		
		int[] guys=new int[MAX];
		for(int i=0;i<MAX;i++){
			guys[i]=i;
		}
		Node head=initialCircularList(guys);
		printCircularList(head);
		
		List<Node> badGuys=new ArrayList<Node>();
		head=kickOutBadGuys(head,badGuys);
		printCircularList(head);
		
		//print location of bad guys
		System.out.print("locations of bad guys are:");
		for(Node node:badGuys){
			System.out.print(node.id+" ");
		}
		
	}

	public static Node kickOutBadGuys(Node head,List<Node> list){
		Node node=head;
		Node previous=node;
		int i=0;
		while(i<NUM){
			int step=STEP;
			while(step>0){
				previous=node;
				node=node.next;
				step--;
			}
			list.add(node);
			previous.next=node.next;
			i++;
		}
		return previous;//No matter what 'previous' is,we can traverse the 'CircularList',starting from 'previous'
	}
	
	public  static Node initialCircularList(int[] data){
		if(data==null||data.length==0){
			return null;
		}
		int len=data.length;
		Node tail=new Node(data[len-1]);
		Node head=tail;
		int i=len-2;
		while(i>=0){
			Node p=new Node(data[i]);
			p.next=head;//尾插法
			tail.next=p;
			head=p;
			i--;
		}
		return head;
	}
	
	public static void printCircularList(Node head){
		if(head==null){
			return;
		}
		System.out.print(head.id+" ");
		Node node=head.next;
		while(node!=null&&node!=head){//end condition is not "node.next==null" but "node==head"
			System.out.print(node.id+" ");
			node=node.next;
		}
		System.out.println();
	}
	private static class Node{
		int id;
		Node next;
		Node(int id){
			this.id=id;
		}
	}
}

0
0
分享到:
评论

相关推荐

    java多个pdf文件合并成一个

    在Java后端开发中,有时候我们需要处理多个PDF文件并将其合并为一个文件,这在诸如报表生成、文档整合等场景中十分常见。Apache PDFBox是一个强大的PDF处理库,它提供了丰富的API来操作PDF文档,包括合并PDF文件的...

    用java把2个tiff或图片合并成一个tiff或图片

    在Java编程环境中,将两个TIFF(Tagged Image File Format)图像或普通图像合并成一个单一的TIFF或图像文件,需要对图像处理有深入的理解,特别是关于图像格式、颜色模型以及位深度的知识。以下是一些相关的技术要点...

    mysql-connector-java-5.1.9.jar.zip

    java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。

    java 多个小文件合成一个文件

    在Java编程语言中,将多个小文件合并成一个文件是一个常见的需求,特别是在处理大量数据或者进行文件归档时。这个过程通常称为文件拼接或文件合并。以下将详细讲解如何使用Java来实现这一功能。 首先,我们需要理解...

    mchange-commons-java-0.2.3.4.jar.zip

    java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。

    多个DLL合并成一个DLL

    ILMerge 这个工具能把多个DLL合并成一个DLL。 开发打包方便多了。 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 开始-》运行 -》 "cmd" -&gt; "cd C:\...

    java500人绕圈圈问题

    500人围成一个圈 数到3的人下个人就从1开始数 最后一个人的位置在那里 //小孩玩游戏,手拉手围成一个...每次数到3的时候这个小孩退出,下一个从1开始再数. //试问,如果有500个小孩,最后剩下的小孩是原来的第多少个小孩.

    yujianbo-java-tools-7.7.0.zip

    yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括配置properties后, 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码...

    word合并,多个word合并成一个

    将多个word路径下的word合并成一个word 第一个路径合并后在第一个位置,最后一个路径合并后在最后

    10 人围坐成一圈报数淘汰游戏

    10 人围坐成一圈(假设他们的编号沿顺时针方向依次为 1 到 10) 。编程序,使用数组来存放各数据(人员编号),从1号人员开始数起(沿顺时针方向),当数到 k 时(其中 k&gt;1,由用户通 过 cin 输入指定),则该号人员...

    yujianbo-java-tools-7.8.0.jar

    yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...

    java源码包---java 源码 大量 实例

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    多个PDF文件合并成一个PDF文件

    在IT行业中,PDF(Portable Document Format)是一种广泛使用的文件格式,因为它能保持文档的原始布局和格式,方便分享和打印。在日常工作中,有时我们需要将多个PDF文件合并成一个,以便于管理和阅读。针对“多个...

    队列(假设n个人编号1..n,他们按编号顺时针站成一圈)如n=5,m=3。1 2 3 4 5,最终输出是3 1 5 2 4。

    2、假设n个人编号1..n,他们按编号顺时针站成一圈,你从第1个人开始顺时针计数,计到m,就从圆圈中请出第m个人,然后从下一个位置从重新计数,计到m,又请出对应的人,如此反复,直到圈中没有人。请写一个程序输出请...

    mysql-connector-java-5.0.8.jar.zip

    java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。

    设有n个正整数,将他们连接成一排,组成一个最大的多位整数

    如果第一个数放在前面组成的数字更大,则返回负数;如果第二个数放在前面组成的数字更大,则返回正数;如果两者相等,则返回0。 3. **排序并输出结果:** 使用Java中的排序算法(例如冒泡排序或使用`Arrays.sort`...

    mysql-connector-java-5.1.24.tar

    MySQL Connector/J是MySQL数据库系统与Java应用程序之间的桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在Java应用中访问MySQL数据库。`mysql-connector-java-...

    yujianbo-java-tools-8.2.0.jar

    yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...

    将多个bmp文件合并成一个bmp文件

    在游戏开发中,为了优化资源加载和提高游戏性能,经常需要将多个静态图像(如bmp文件)合并成一个大的图像文件。这个过程被称为精灵表(Sprite Sheet)或纹理 atlas 的制作,是“将多个bmp文件合并成一个bmp文件”这...

    多个TXT文件合并成一个

    这个软件特别适用于Windows 7 64位操作系统,它能够快速地将同一文件夹内的多个TXT文件整合成一个大的TXT文件,大大提高了工作效率。 首先,理解这个过程涉及的技术概念。"TXT"是一种简单的文本格式,它不包含任何...

Global site tag (gtag.js) - Google Analytics