当前位置:首页 > 开发 > 编程语言 > Java > 正文

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

发表于: 2012-03-28   作者:bylijinnan   来源:转载   浏览:
摘要: import java.util.ArrayList; import java.util.List; public class KickOutBadGuys { /** * 题目:13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。 * Maybe you can find out
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-13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
大多数人不能承认自己有缺点,听到别人对自己有负面的评价,第一时间努力做的是:解释、辩驳,反而
你是第几次收到好人卡了? 你的ID是否如此? 被雷到了吗? 我躲...也躲不起... Orz... 劳动光荣, 好人更
一、 盛大的文化是‘讲道理’,讲道理的人就是盛大人。 在内部分成3个标准: 明白人->能人_第1张
1、我不想看《葫芦娃》 工作需要,留守在上海半月,出行地铁少不了,某日我从1号线A站(如下图)在
import java.util.Arrays; public class lzwCode { public static void main(String[] args) { int
(最早发表于http://blog.sina.com.cn/webexren) 2008年11月15日下午,我突然接到Jim的电话,他说
(最早发表于http://blog.sina.com.cn/webexren) 2008年11月15日下午,我突然接到Jim的电话,他说
几个月没有做开发了,前不久刚接一个小活做开发,在一个jsp页面写的一段js代码,老是报上面的错,花
1.总结: 1、注意页面的name为emails.host,这样才可把 group和相应属性分开 2、作为Value的Map需转
1.总结: 1、注意页面的name为emails.host,这样才可把 group和相应属性分开 2、作为Value的Map需转
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号