首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于java的小计算题解决方法

2012-01-03 
关于java的小计算题从1数到9,数到5就把5去掉,接着数,再数到5就在去掉,最后只剩下一个数,那个数是什么?谁知

关于java的小计算题
从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); 





}

[解决办法]
剩下3个的时候,x.length()无论如何都出现不了(i==4) 
所以无法继续下去
[解决办法]

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)); }  }
[解决办法]
3楼为什么不用generic以及用list声明
[解决办法]
没明白意思!
[解决办法]
约瑟夫环问题,以前有一个帖子,问题是:
100人围成一个圈,随机挑出一个开始报数1,他的下一位(顺、逆时针无所谓)接着报下一个数字,报到7的人出圈子,圈子缩小,而刚出去人的下一位又从1开始报数,如此循环,求最后剩下的那个人。

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

写过类实现了,后面的朋友用字符串截取也实现了,效率更高。不过貌似这个帖子找不到了。
[解决办法]
请问这是不是约瑟夫环的问题阿,我以前用c++写过的,用循环链表怎么样,情楼上的朋友指点下我的思路
[解决办法]
四楼才是正道
[解决办法]
mark
[解决办法]
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());
}

}

[解决办法]
顶一下!多看贴子总是有用的、
[解决办法]
学习一下 顶
[解决办法]
3楼的我想得到最后一个数怎么写啊, 
if(j==5) 

System.out.print(list.get(k)+"-"); 


list.remove(k); 
j=0; 
k--; 

这段代码给我解释下被,谢谢了

j一直在加,它就相当与数人数,当数到5的时候,就把5对应的这个数打印出来,然后删除它,j=0是重新开始数人,k相当与这个数组的总数,删掉后当然要减一了`
[解决办法]
改了楼主的源代码

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); }}
[解决办法]
约瑟夫环问题,很经典的,嘿嘿
[解决办法]
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号

[解决办法]
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
[解决办法]
剩下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); 

}
}

热点排行
Bad Request.