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;
}
}
}
分享到:
相关推荐
根据获取的多个base64转化成pdf文件,把转化后的pdf文件合并成一个pdf文件
java写的读取2个tiff文件或图片,合并成一个图片 可以修改图片所在位置
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。 如:n=3时,3个整数13,312,343,连成的最大整数为34331213。 如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。 输入描述: 有多组测试样例,每组...
java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
ILMerge 这个工具能把多个DLL合并成一个DLL。 开发打包方便多了。 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 开始-》运行 -》 "cmd" -> "cd C:\...
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括配置properties后, 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码...
将多个word路径下的word合并成一个word 第一个路径合并后在第一个位置,最后一个路径合并后在最后
java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
2、假设n个人编号1..n,他们按编号顺时针站成一圈,你从第1个人开始顺时针计数,计到m,就从圆圈中请出第m个人,然后从下一个位置从重新计数,计到m,又请出对应的人,如此反复,直到圈中没有人。请写一个程序输出请...
java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
java 多个小文件合成一个文件 java 多个小文件合成一个文件
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
.Net程序压缩打包助手. 把exe和dll打包成一个文件。神器呀
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
设有N个人站成一排,从左到右的编号分别为1——N,现在从左往右报数“1,2,3,1,2,3。。。”,数到1的人出列,数到2和3的人立即站到队伍的最右端。报数过程反复进行,直到N个人都出列为止。要求给出他们出列顺序...