AbuserBIG
2016-05-04 08:44
采纳率: 0%
浏览 2.4k

有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条回答 默认 最新

  • 杨柳依依-candy 2016-05-04 10: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;
            }
        }
    }
    
    
    
    评论
    解决 无用
    打赏 举报
  • 杨柳依依-candy 2016-05-04 10: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;
                }
            }
        }
    
    评论
    解决 无用
    打赏 举报
  • 秦大圣 2016-05-04 17: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 2016-05-05 06:02

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题