有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。
问:最后剩下的是100人中的第几个人?
以上是原题.
我自己写的代码是:
public static void main(String[] args) {
//有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。
//问:最后剩下的是100人中的第几个人?
ArrayList<Integer> array = new ArrayList<Integer>();
for(int x = 1;x <= 100 ;x++ ){
array.add(x);
}
method(array,0);
}
private static void method(ArrayList<Integer> array, int x) {
int count = 0;
while( array.size() > 1 ){
if( x < array.size() - 1 ){
x++;
count++;
}else{
x = 0;
count++;
}
if(count == 13){
array.remove(x);
System.out.println(array);
x = 0;
method(array,x);
}
}
}
这个答案是2
别人写的代码是:
public static void main(String[] args) {
int p = 100;
/**** 初始化人员 ***/
boolean[] per = new boolean[p];// boolean数组表示站成一圈的人,false表示退出
for (int i = 0; i < per.length; i++) {
per = true;
}
/**** 报号 ***/
int t = 0, len = per.length;
while (len > 1) {
for (int i = 0; i < per.length; i++) {
if (per) {
t++;
if (t == 14) {
t = 0;
per = false;
len--;
}
}
}
}
/***** 结果 *****/
System.out.println("最后的情况:" + Arrays.toString(per));
for (int i = 0; i < per.length; i++) {
if (per) {
System.out.println("原来喊的数:" + (i + 1) % 14);
}
}
}
这个答案是8
还有个:
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Student> set=new TreeSet<Student>();
for(int x=1;x<101;x++) {
set.add(new Student(x));
}
System.out.println(set.size());
int count=1;//定义一个计数器,
/*只要集合内还有一个以上的元素,便对集合进行遍历,遍历是计数器自增,每当计数器自增到了14的时候,就
* 将遍历到的那个元素从集合中删除,并将计数器清零,直到集合中的元素为一的时候,跳出循环。
* */
while(set.size()!=1) {
Iterator <Student>it=set.iterator();
while(it.hasNext()) {
if(count==14) {
it.next();//
it.remove();
count=1;
continue;
}
it.next();
count++;
}
}
System.out.println(set);
}
}
class Student implements Comparable<Student> {
public int id;
Student(int id) {
this.id=id;
}
public int compareTo(Student s) {
return new Integer(this.id).compareTo(new Integer(s.id));
}
@Override
public String toString() {
return id+"";
}
}
最后结果是92 |
寻求准确答案?????? |
|