从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);
}
} } }
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);
}
} } }
所以无法继续下去
从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++; } } }
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));
}
}这个问题我好像有回复过啊
if(j==5)
{
System.out.print(list.get(k)+"-");
list.remove(k);
j=0;
k--;
}
这段代码给我解释下被,谢谢了
* @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());
}}
if(j==5)
{
System.out.print(list.get(k)+"-");
list.remove(k);
j=0;
k--;
}
这段代码给我解释下被,谢谢了j一直在加,它就相当与数人数,当数到5的时候,就把5对应的这个数打印出来,然后删除它,j=0是重新开始数人,k相当与这个数组的总数,删掉后当然要减一了`
{
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();
}
}OutPut:
请输入总人数:10
输入出圈时报到的数字:4
将这些人分别标记为1-10号,依次出列的情况如下:
第 1个出列的人 : 第4号
第 2个出列的人 : 第8号
第 3个出列的人 : 第2号
第 4个出列的人 : 第7号
第 5个出列的人 : 第3号
第 6个出列的人 : 第10号
第 7个出列的人 : 第9号
第 8个出列的人 : 第1号
第 9个出列的人 : 第6号
最后剩下的人为 : 第5号
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
所以无法继续下去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); }
}