`
seaoop
  • 浏览: 15418 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[Java面试题]腾讯的一道笔试题

阅读更多

腾讯公司的一道笔试题,题目大致意思如类注释:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 
 * 列表中有100个人,从第1个开始数数,当数到7或者7的倍数时,
 * 则从列表中将该对象移除,数到末尾后又开始从第一个循环开始数
 * 直到删除至最后一个人
 * @author wuhaiming
 * 
 */
public class CountExit
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		/*
		 * 添加100个人到列表中
		 */
		List<Person> persons = new ArrayList<Person>();
		for(int i = 0; i < 100; i++)
		{
			Person person = new Person();
			person.setId(i);
			
			persons.add(person);
		}
		print(persons);
		
		//用于计数,数到7或者7的倍数时则退出
		int count = 0;
		//列表中的索引
		int index = 0;
		//列表中的所有对象
		int personSize = persons.size();
		
		while(personSize > 1)
		{
			count++;
			
			if(count % 7 == 0)
			{
				persons.remove(index);
				personSize--;
			}
			else
			{
				index++;
			}

			if(index == persons.size())
			{
				index = 0;
			}

		}
		
		print(persons);
	}
	
	/**
	 * 将列表中所有的数据打印出来
	 * @param persons
	 */
	public static void print(List<Person> persons)
	{
		for (Iterator<Person> iter = persons.iterator(); iter.hasNext();)
		{
			Person per = iter.next();
			System.out.print(per);
		}
		System.out.println();
	}

}

/**
 * 
 * Person对象,有个唯一的ID标识
 * @author wuhaiming
 * 
 */
class Person
{
	private int id = 0;

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}
	
	@Override
	public String toString()
	{
		return id + " ";
	}
}

 

2
0
分享到:
评论
9 楼 windflower_07 2013-03-11  
首先队列的项目是不可能移除完的,所以不能用 size()>1 来判断循环结束
另外,如果按照注释理解,这个题目就如 8楼 所说,直接移除index大于=6的即可
不需要写这么多代码
对方的意思是不是到最后一个之后,循环从第一个数接着数,这样才有点意义。

		List<Person> personList = new LinkedList<Person>();
		for (int i = 0; i < 100; i++) {
			personList.add(new Person(i));
		}

		// 每7个数算一组,这个是数组内部下标
		int innerIndex = 1;
		// 整个数组的当前索引
		int currentIndex = 0;
		// 只要列表长度大于6,就还有7或7的倍数
		while (personList.size() > 6) {

			// 如果到达最后端,实际就是开头,这里将这个队列循环起来
			if (currentIndex == personList.size()) {
				currentIndex = 0;
			}

			// 索引从0开始
			if (innerIndex % 7 == 0) {
				personList.remove(currentIndex);
				innerIndex = 1;
				print(personList);
			} else {
				// 不是7的倍数就前进
				currentIndex++;
				innerIndex++;
			}

		}
8 楼 sinianxue 2013-02-26  
其实这个分析一下就知道  除了比7小的,其他的直接删除掉
7 楼 s405786950 2012-09-09  
s405786950 写道
public class RemoveSeven {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new RemoveSeven().fun();
	}
	public void fun()
	{
		List<Integer> list = new LinkedList<Integer>();
		for(int i=1;i<101;++i)
			list.add(i);
		
		deal(list,7);
	}
	private void deal(List<Integer> list,int space) {
		int index = 0;
		java.util.Iterator<Integer> iter ;
		while(list.size() > 0)
		{
			iter = list.iterator();
			while(iter.hasNext())
			{
				index++;
				int which=iter.next();
				if(index%space == 0)
				{
					System.out.println("remove-->"+which);
					iter.remove();
				}
			}
			System.out.println("-------------------");
			index = index % space;
		}
	}
	
}
路过,顺便写了一个.

6 楼 s405786950 2012-09-09  
s405786950 写道
public class RemoveSeven {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new RemoveSeven().fun();
	}
	public void fun()
	{
		List<Integer> list = new LinkedList<Integer>();
		for(int i=1;i<101;++i)
			list.add(i);
		
		deal(list,7);
	}
	private void deal(List<Integer> list,int space) {
		int index = 0;
		java.util.Iterator<Integer> iter ;
		while(list.size() > 0)
		{
			iter = list.iterator();
			while(iter.hasNext())
			{
				index++;
int which=iter.next();
				if(index%space == 0)
				{
					
					System.out.println("remove-->"+which);
					iter.remove();
				}
			}
			System.out.println("-------------------");
			index = index % space;
		}
	}
	
}
路过,顺便写了一个.

5 楼 s405786950 2012-09-09  
public class RemoveSeven {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new RemoveSeven().fun();
	}
	public void fun()
	{
		List<Integer> list = new LinkedList<Integer>();
		for(int i=1;i<101;++i)
			list.add(i);
		
		deal(list,7);
	}
	private void deal(List<Integer> list,int space) {
		int index = 0;
		java.util.Iterator<Integer> iter ;
		while(list.size() > 0)
		{
			iter = list.iterator();
			while(iter.hasNext())
			{
				index++;
				if(index%space == 0)
				{
					int which=iter.next();
					System.out.println("remove-->"+which);
					iter.remove();
				}
			}
			System.out.println("-------------------");
			index = index % space;
		}
	}
	
}
路过,顺便写了一个.
4 楼 ning5566 2012-04-11  
我看了一下这个算法不是很妥当啊。。而且while会无线死循环。
3 楼 dzr1990 2011-09-23  
当你remove(Person)的时候,整个List就会向左移一位,这个问题你考虑过没有?

并且真的能删掉所有的数吗?是不是index<7的删不掉呢?
2 楼 w2gavin 2010-08-03  
题目意思有问题  死循环
1 楼 luckygino 2010-07-19  
问题呢?  ?

相关推荐

Global site tag (gtag.js) - Google Analytics