关于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)
所以无法继续下去
[解决办法]
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相当与这个数组的总数,删掉后当然要减一了`
[解决办法]
改了楼主的源代码
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); }}
[解决办法]
约瑟夫环问题,很经典的,嘿嘿
[解决办法]
约瑟夫环问题,很经典的,我来个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();
}
}