2 abuserbig AbuserBIG 于 2016.05.04 16:44 提问

有1到100共100个数, 从1开始, 每隔1, 2, 3... 个数拿走一个数, 最后剩下几?

有1到100共100个数, 从1开始, 每隔1, 2, 3, 4 ... 个数拿走一个数, 一直循环, 最后剩下几?
就是说, 一开始把 1 拿走, 隔1个数(2), 把3拿走, 再隔2个数(4, 5), 把6拿走, 再隔3个数(7, 8, 9)把10拿走. 数到100之后再返回来从2开始循环, 直到最后剩下1个数为止, 请问最后剩下几? 如果是1到n呢?
请用Java编程解决.
求大神帮忙

4个回答

lp897225636
lp897225636   2016.05.04 18:14
public static void compute(int n) {
    ArrayList<Integer> number = new ArrayList<>();
    for (int i = 1; i <= n; i++) {
        number.add(i);
    }
    while (number.size() > 1) {
        int index = 0;
        int count = 0;
        while (index < number.size()) {
            number.remove(index);
            count++;
            index = count * (count + 1) / 2;
        }
    }
}

AbuserBIG
AbuserBIG 您没看明白要求吧, 我自己搞出来了. 总之还是谢谢了
一年多之前 回复
lp897225636
lp897225636   2016.05.04 18:14
    public static void compute(int n) {
        ArrayList<Integer> number = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            number.add(i);
        }
        while (number.size() > 1) {
            int index = 0;
            int count = 0;
            while (index < number.size()) {
                number.remove(index);
                count++;
                index = count * (count + 1) / 2;
            }
        }
    }
qinjisheng_11
qinjisheng_11   2016.05.05 01:12

public class Person {
    private int id;
    private boolean live;

    public Person(int id, boolean live) {
        this.id = id;
        this.live = live;
    }

    public boolean isLive() {
        return live;
    }

    public void setLive(boolean live) {
        this.live = live;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}
 import java.util.ArrayList;
import java.util.List;

public class CountNumber {
    public static final int NUMBER = 100;

    List<Person> persons = new ArrayList<Person>();

    public static void main(String[] args) {
        CountNumber cn = new CountNumber();
        cn.add();
        cn.deals();
    }

    public void deals() {
        while (persons.size() != 1) {
            deal();
        }
        System.out.println("最后留下的数字是:" + persons.get(0).getId());
    }

    public void deal() {
        int count = 1;// 计数器
        int index = 0;// 指示器

        while (index < persons.size()) {
            persons.get(index).setLive(false);
            count++;
            index += count;
        }

        for (int i = 0; i < persons.size(); i++) {
            if (persons.get(i).isLive() == false) {
                persons.remove(i);
            }
        }
    }

    public void add() {
        for (int i = 1; i < NUMBER+1; i++) {
            Person p = new Person(i, true);
            persons.add(p);
        }
    }
}

自己写的,只是测试3个数,6个数的情况,其他没有测试,所以不保证对,参考下,最后的输出为94(100个数)

AbuserBIG
AbuserBIG 可能我说的不明白, 100数相当于摆成一个圈, 数到100之后接着从2开始数, 并不是说新的循环开始之前数到就不算了. 我自己搞了一早上搞出来了, 总之还是谢谢了.
一年多之前 回复
lp897225636
lp897225636 回复有节奏的键盘: 感觉搞得太复杂了
一年多之前 回复
qinjisheng_11
qinjisheng_11 上面的Person.java,下面的CountNumber.java,自己运行没问题
一年多之前 回复
AbuserBIG
AbuserBIG   2016.05.05 14:02

好吧, 如果有人还对这个题有兴趣我就公布一下100个数最后剩下的是31

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!