A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马清泽 中级黑马   /  2012-12-7 16:41  /  1892 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

任意人数的一排人,报数,一二三,报到三的人出列,然后继续一二三报数,到队尾最后一人时,再从队列的开始处继续,直到只剩下两个人,要求打印出出列的人的序号
上网看见这个问题,这种问题属于算法问题吗?如何分析算法之类的问题?

3 个回复

倒序浏览
本帖最后由 xjandrew 于 2012-12-10 21:42 编辑

思路:
1.报数一二三
三出列
报数封装成对象,返回三的值
报数()
remove
removeFirst()

for循环控制报到三的人
报到的出列
else回去

直到(LinkList.size==2)

持续删除用LinkList

2.获取三出列
ArrayList
add(报数())

3.
对象:人
属性:序号
  1. import java.util.*;


  2. public class BaoshuTest
  3. {
  4.         public static void main(String[]args)
  5.         {
  6.                 LinkedList<Person> list = new LinkedList<Person>();
  7.                 ArrayList<Person> al = new ArrayList<Person>();
  8.                
  9.                 for(int i=1; i<=10; i++)
  10.                 {
  11.                         list.add(new Person(i));//添加总人数到list中
  12.                         
  13.                 }
  14.                 while(list.size()>2)//剩余人数在两个以上就调用报数
  15.                 {
  16.                         Person p = baoshu(list);
  17.                         if(p != null)
  18.                                 al.add(p);
  19.                         
  20.                 }
  21.                 for(Person p : al)
  22.                 {
  23.                         System.out.println(p);
  24.                 }
  25.         }
  26.         public static Person baoshu(LinkedList<Person> list)
  27.         {
  28.                 while(true)
  29.                 {
  30.                         
  31.                         for(int i=1;i<=3;i++)//实现报数一二三
  32.                         {
  33.                                 Person p = list.removeFirst();
  34.                                 if(i==3)
  35.                                         return p;
  36.                                 else
  37.                                         list.add(p);
  38.                         }
  39.                         
  40.                         if(list.size()==2)
  41.                                 break;
  42.                 }
  43.                 return null;
  44.                
  45.         }
  46. }
  47. class Person
  48. {
  49.         private int num;
  50.         Person(int num)
  51.         {
  52.                 this.num = num;
  53.         }
  54.         public String toString()//高级for中的打印要自动调用toString(),否则直接找Object中的toString()去了
  55.         {
  56.                 return num+"";
  57.         }
  58.         public int getID()
  59.         {
  60.                 return num;
  61.         }
  62. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报

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);
                   }
           }
          
   }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马