有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编程解决.
求大神帮忙
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;
}
}
}
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;
}
}
}
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个数)
好吧, 如果有人还对这个题有兴趣我就公布一下100个数最后剩下的是31