`

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文件合并成一个

    根据获取的多个base64转化成pdf文件,把转化后的pdf文件合并成一个pdf文件

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

    java写的读取2个tiff文件或图片,合并成一个图片 可以修改图片所在位置

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

    设有n个正整数,将他们连接成一排,组成一个最大的多位整数。 如:n=3时,3个整数13,312,343,连成的最大整数为34331213。 如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。 输入描述: 有多组测试样例,每组...

    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:\...

    yujianbo-java-tools-7.7.0.zip

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

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

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

    mysql-connector-java-5.1.9.jar.zip

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

    yujianbo-java-tools-7.8.0.jar

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

    队列(假设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文件。

    yujianbo-java-tools-8.2.0.jar

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

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

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

    yujianbo-java-tools-8.0.0.jar

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

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

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

    yujianbo-java-tools-8.0.5.jar

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

    .Net程序压缩打包助手. 把exe和dll打包成一个文件

    .Net程序压缩打包助手. 把exe和dll打包成一个文件。神器呀

    yujianbo-java-tools-8.2.1.jar

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

    yujianbo-java-tools-8.0.8.jar

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

    队列操作的验证及应用

    设有N个人站成一排,从左到右的编号分别为1——N,现在从左往右报数“1,2,3,1,2,3。。。”,数到1的人出列,数到2和3的人立即站到队伍的最右端。报数过程反复进行,直到N个人都出列为止。要求给出他们出列顺序...

Global site tag (gtag.js) - Google Analytics