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;
}
}
}
分享到:
相关推荐
在Java后端开发中,有时候我们需要处理多个PDF文件并将其合并为一个文件,这在诸如报表生成、文档整合等场景中十分常见。Apache PDFBox是一个强大的PDF处理库,它提供了丰富的API来操作PDF文档,包括合并PDF文件的...
在Java编程环境中,将两个TIFF(Tagged Image File Format)图像或普通图像合并成一个单一的TIFF或图像文件,需要对图像处理有深入的理解,特别是关于图像格式、颜色模型以及位深度的知识。以下是一些相关的技术要点...
java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
在Java编程语言中,将多个小文件合并成一个文件是一个常见的需求,特别是在处理大量数据或者进行文件归档时。这个过程通常称为文件拼接或文件合并。以下将详细讲解如何使用Java来实现这一功能。 首先,我们需要理解...
java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
ILMerge 这个工具能把多个DLL合并成一个DLL。 开发打包方便多了。 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 开始-》运行 -》 "cmd" -> "cd C:\...
500人围成一个圈 数到3的人下个人就从1开始数 最后一个人的位置在那里 //小孩玩游戏,手拉手围成一个...每次数到3的时候这个小孩退出,下一个从1开始再数. //试问,如果有500个小孩,最后剩下的小孩是原来的第多少个小孩.
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括配置properties后, 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码...
将多个word路径下的word合并成一个word 第一个路径合并后在第一个位置,最后一个路径合并后在最后
10 人围坐成一圈(假设他们的编号沿顺时针方向依次为 1 到 10) 。编程序,使用数组来存放各数据(人员编号),从1号人员开始数起(沿顺时针方向),当数到 k 时(其中 k>1,由用户通 过 cin 输入指定),则该号人员...
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在IT行业中,PDF(Portable Document Format)是一种广泛使用的文件格式,因为它能保持文档的原始布局和格式,方便分享和打印。在日常工作中,有时我们需要将多个PDF文件合并成一个,以便于管理和阅读。针对“多个...
2、假设n个人编号1..n,他们按编号顺时针站成一圈,你从第1个人开始顺时针计数,计到m,就从圆圈中请出第m个人,然后从下一个位置从重新计数,计到m,又请出对应的人,如此反复,直到圈中没有人。请写一个程序输出请...
java jar包,亲测试可用 ...把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
如果第一个数放在前面组成的数字更大,则返回负数;如果第二个数放在前面组成的数字更大,则返回正数;如果两者相等,则返回0。 3. **排序并输出结果:** 使用Java中的排序算法(例如冒泡排序或使用`Arrays.sort`...
MySQL Connector/J是MySQL数据库系统与Java应用程序之间的桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在Java应用中访问MySQL数据库。`mysql-connector-java-...
yujianbo-java-tools.jar是本人平时里用到的工具类,分离出来打包成一个单独的jar工具包,里面包括: 1、数据库的一键连接以及增删改查,获取数据库数据直接映射到JavaBean; 2、生成随机验证码(字符或数字或者...
在游戏开发中,为了优化资源加载和提高游戏性能,经常需要将多个静态图像(如bmp文件)合并成一个大的图像文件。这个过程被称为精灵表(Sprite Sheet)或纹理 atlas 的制作,是“将多个bmp文件合并成一个bmp文件”这...
这个软件特别适用于Windows 7 64位操作系统,它能够快速地将同一文件夹内的多个TXT文件整合成一个大的TXT文件,大大提高了工作效率。 首先,理解这个过程涉及的技术概念。"TXT"是一种简单的文本格式,它不包含任何...