首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于java的小计算题 [已结贴,结贴人:java2000_net]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-17 23:10:48 楼主
    从1数到9,数到5就把5去掉,接着数,再数到5就在去掉,最后只剩下一个数,那个数是什么?谁知道这个例子怎么写啊,我写了 一个循环到剩下3个,帮我看看我的错误,或是帮我写个小例子,万分感谢!!下面是我的代码
    class er
    {
    public static void main(String[] args)
    {
    StringBuffer x=new StringBuffer("123456789");
    int index = 0;
    for(int i=0;i <=x.length();i++)
    {
    index++;
    if(index==x.length())
    index = 0;
    if(i==4)
    {
    x.delete(index-1,index);
    i=0;
    System.out.println(x);
    }
    }

    }

    }
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 00:18:251楼 得分:3
    剩下3个的时候,x.length()无论如何都出现不了(i==4)
    所以无法继续下去
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 08:34:042楼 得分:0
    按照你的算法思路继续下去,呵呵:

    /*
    从1数到9,数到5就把5去掉,接着数,再数到5就在去掉,最后只剩下一个数,那个数是什么?谁知道这个例子怎么写啊,我写了 一个循环到剩下3个,帮我看看我的错误,或是帮我写个小例子,万分感谢!!下面是我的代码
    */


    class er 

    public static void main(String[] args) 

      //StringBuffer x=new StringBuffer("123456789"); 
      StringBuffer x=new StringBuffer(args[0]);
      int index = 0;
      int j=0;
      for(;;) 
      { 
     
        if (x.length()==1)
        {
          System.exit(0);
        }

        index++; 

        if(j==4) 
        { 
          x.delete(index-1,index);
          j=0; 
          System.out.println(x); 
        } 
       
        if(index==x.length())//数到最后一个位置的时候,从头再来 
        {
          index = 0;
        }
        if(index>x.length())//说明最后一个刚刚被去掉了
        {
          index=0;
          j--;
        }

        j++;

      } 



    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • AWUSOFT
    • 等级:
    发表于:2007-10-18 08:42:033楼 得分:3
    Java code
    import java.util.*; public class Room { public static void main(String args[]) { ArrayList list = new ArrayList(); for(int i=1;i<10;i++) { list.add(i+""); } int j=1;int k=0; while(list.size()>1) { if(k>=list.size()) { k=0; } if(j==5) { System.out.print(list.get(k)+"-"); list.remove(k); j=0; k--; } j++; k++; } System.out.println(list.get(0)); } }

    这个问题我好像有回复过啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 10:45:484楼 得分:0
    3楼的代码写的好,谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 10:54:395楼 得分:0
    3楼的我想得到最后一个数怎么写啊,
      if(j==5)
                {
                    System.out.print(list.get(k)+"-");
                    list.remove(k);
                    j=0;
                    k--;
                }
    这段代码给我解释下被,谢谢了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 14:26:456楼 得分:3
    3楼为什么不用generic以及用list声明
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 15:20:367楼 得分:3
    没明白意思!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 16:30:058楼 得分:3
    约瑟夫环问题,以前有一个帖子,问题是:
    100人围成一个圈,随机挑出一个开始报数1,他的下一位(顺、逆时针无所谓)接着报下一个数字,报到7的人出圈子,圈子缩小,而刚出去人的下一位又从1开始报数,如此循环,求最后剩下的那个人。

    扩展:人数由用户输入,求幸存者。

    写过类实现了,后面的朋友用字符串截取也实现了,效率更高。不过貌似这个帖子找不到了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • newflypig
    • 等级:
    发表于:2007-10-18 16:32:169楼 得分:3
    请问这是不是约瑟夫环的问题阿,我以前用c++写过的,用循环链表怎么样,情楼上的朋友指点下我的思路
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 17:18:4810楼 得分:3
    四楼才是正道
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 17:38:1111楼 得分:3
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 20:16:3812楼 得分:3
    package src;

    import java.util.*;

    public class MathTest {

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO 自动生成方法存根
    Vector <Integer> array = new Vector <Integer>();
    int i = 0,flag =1,index = 0;
    for(i=1;i <=9;i++){
    array.add(new Integer(i));
    }
    System.out.println(array.size());
    Enumeration e = array.elements();
    while(e.hasMoreElements()){
    System.out.println(e.nextElement());
    }

    while(true){
    if(array.size()==1){
    break;
    }
    else{
    if(array.size()>1 && flag%5 == 0){
    System.out.println("数据"+array.elementAt(index)+"被删除");
    array.remove(index);
    index--;
    }
    flag++;
    index = (index+1)%array.size();
    }

    }

    System.out.println("结果为:"+array.firstElement());
    }

    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 23:35:2713楼 得分:3
      顶一下!多看贴子总是有用的、
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 08:21:1114楼 得分:3
    学习一下 顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 10:16:0315楼 得分:3
    3楼的我想得到最后一个数怎么写啊,
      if(j==5)
                {
                    System.out.print(list.get(k)+"-");
                    list.remove(k);
                    j=0;
                    k--;
                }
    这段代码给我解释下被,谢谢了

    j一直在加,它就相当与数人数,当数到5的时候,就把5对应的这个数打印出来,然后删除它,j=0是重新开始数人,k相当与这个数组的总数,删掉后当然要减一了`
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 10:34:5716楼 得分:0
    index = (index+1)%array.size();

    这句写的超级的帅`
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 11:49:3217楼 得分:3
    改了楼主的源代码
    Java code
    class er { public static void main(String[] args) { StringBuffer x=new StringBuffer("123456789"); int index = 0; for(int i = 0; x.length() > 1/*改了这里*/;i++) { if(i == 4) { //x.delete(index-1,index); x.deleteCharAt(index); //改了这里 i=0; System.out.println(x); } index++; if(index>=x.length() ) //改了这里 index = 0; } System.out.println("最后一个数:" + x); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 11:55:2818楼 得分:0
    楼主for循环的成立条件应该是 当字符串的长度  >1时,继续循环
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 11:58:0019楼 得分:3
    约瑟夫环问题,很经典的,嘿嘿
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 20:26:5420楼 得分:3
    Java code
    约瑟夫环问题,很经典的,我来个HashMap的来实现这个的,效率怎么样,看你要做什么了: package test02; import java.io.*; import java.util.*; public class ChoosePerson { private int n; private int flag; public ChoosePerson() { this.initialization(); } private void initialization(){ boolean f = true; while(f){ System.out.print("请输入总人数:"); try{ n = input(); }catch(IOException ae){ ae.printStackTrace(); continue; }catch(NumberFormatException be){ be.printStackTrace(); continue; } f = false; } f = true; while(f){ System.out.print("输入出圈时报到的数字:"); try{ flag = input(); }catch(IOException ae){ ae.printStackTrace(); continue; }catch(NumberFormatException be){ be.printStackTrace(); continue; } f = false; } } public static int input() throws IOException,NumberFormatException{ int n = 0; InputStreamReader ir = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(ir); n = Integer.parseInt(br.readLine()); return n; } public void choose(){ LinkedHashMap<Integer,String> lhmp = new LinkedHashMap<Integer,String>(); String s = null; for(int i = 0 ; i < n ; i++){ s = "" + (i+1) + ""; lhmp.put(i , s); } Object[] num = lhmp.keySet().toArray(); int count = 0; int order = 1; System.out.println("将这些人分别标记为1-" + n +"号,依次出列的情况如下:"); while(lhmp.size() != 1){ for(int i = 0 ; i < num.length ; i++){ count++; if(count % flag == 0){ if(order < 10){ System.out.println("" + (order++) + "个出列的人 : " + lhmp.get(num[i])); } else System.out.println("" + (order++) + "个出列的人 : " + lhmp.get(num[i])); lhmp.remove(num[i]); } } num = lhmp.keySet().toArray(); } System.out.println("最后剩下的人为 : " + lhmp.get(num[0])); } /** * @param args */ public static void main(String[] args){ ChoosePerson c = new ChoosePerson(); c.choose(); } }


    OutPut:
    请输入总人数:10
    输入出圈时报到的数字:4
    将这些人分别标记为1-10号,依次出列的情况如下:
    第 1个出列的人 : 第4号
    第 2个出列的人 : 第8号
    第 3个出列的人 : 第2号
    第 4个出列的人 : 第7号
    第 5个出列的人 : 第3号
    第 6个出列的人 : 第10号
    第 7个出列的人 : 第9号
    第 8个出列的人 : 第1号
    第 9个出列的人 : 第6号
    最后剩下的人为 : 第5号
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 20:34:5321楼 得分:0
    纯粹一时为了娱乐,没考虑什么排列的速度,写得不好,呵呵~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-20 15:13:3222楼 得分:3
    class J_Test

    {

    private static int num=1;

    public static void main(String args[])

    {

    String str="123456789";

    while(str.length()>1)
    {
    for(int i=0;i <str.length();i++)
    {
    if(num%5==0)
    {
    int m=str.length();
    str=str.substring(0,i)+str.substring(i+1,m);
    }
    num++;
    }
    }
                  System.out.println(str);


    }
    }
    最后输出的结果是4
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-20 16:15:4223楼 得分:2
    剩下3个的时候,x.length()无论如何都出现不了(i==4) 
    所以无法继续下去

    class er 

    public static void main(String[] args) 

    StringBuffer x=new StringBuffer("123456789"); 
    int index = 0; 


    for(int i = 0; x.length() > 1/*改了这里*/;i++) 



    if(i == 4) 

        //x.delete(index-1,index);   
        x.deleteCharAt(index); //改了这里
        i=0; 
        System.out.println(x);

    }


    index++;
    if(index>=x.length() )  //改了这里
        index = 0; 



    System.out.println("最后一个数:" + x);

    }
    }
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved