黑马程序员技术交流社区
标题:
求助
[打印本页]
作者:
马清泽
时间:
2012-12-7 16:41
标题:
求助
任意人数的一排人,报数,一二三,报到三的人出列,然后继续一二三报数,到队尾最后一人时,再从队列的开始处继续,直到只剩下两个人,要求打印出出列的人的序号
上网看见这个问题,这种问题属于算法问题吗?如何分析算法之类的问题?
作者:
xjandrew
时间:
2012-12-10 21:34
本帖最后由 xjandrew 于 2012-12-10 21:42 编辑
思路:
1.报数一二三
三出列
报数封装成对象,返回三的值
报数()
remove
removeFirst()
for循环控制报到三的人
报到的出列
else回去
直到(LinkList.size==2)
持续删除用LinkList
2.获取三出列
ArrayList
add(报数())
3.
对象:人
属性:序号
import java.util.*;
public class BaoshuTest
{
public static void main(String[]args)
{
LinkedList<Person> list = new LinkedList<Person>();
ArrayList<Person> al = new ArrayList<Person>();
for(int i=1; i<=10; i++)
{
list.add(new Person(i));//添加总人数到list中
}
while(list.size()>2)//剩余人数在两个以上就调用报数
{
Person p = baoshu(list);
if(p != null)
al.add(p);
}
for(Person p : al)
{
System.out.println(p);
}
}
public static Person baoshu(LinkedList<Person> list)
{
while(true)
{
for(int i=1;i<=3;i++)//实现报数一二三
{
Person p = list.removeFirst();
if(i==3)
return p;
else
list.add(p);
}
if(list.size()==2)
break;
}
return null;
}
}
class Person
{
private int num;
Person(int num)
{
this.num = num;
}
public String toString()//高级for中的打印要自动调用toString(),否则直接找Object中的toString()去了
{
return num+"";
}
public int getID()
{
return num;
}
}
复制代码
作者:
王进亮
时间:
2012-12-20 16:22
public class Count3Quit {
public static void main(String args[]){
Boolean arry[]=new Boolean[500];
for(int i=0;i<arry.length;i++){
arry[i]=true;
}
int CountNum=arry.length;
int CountQuit=0;
int index=0;
while(CountNum>2){
if(arry[index]==true){
CountQuit++;
if(CountQuit==3){
arry[index]=false;
CountNum--;
CountQuit=0;
}
}
index++;
if(index==arry.length){
index=0;
}
}
for(int i=0;i<arry.length;i++){
if(arry[i]==true){
System.out.println(i);
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2