第一题(10分) :集合的灵活运用
需求
目前有100名囚犯,每个囚犯的编号是1 -200之间的随机数。现在要求依次随机生成100名囚犯的编号(要求这些囚犯的编号是不能重复的) ,然后让他们依次站成一排。(注:位置是从1开始计数的),接下来,国王命令手下先干掉全部奇数位置处的人。剩下的人,又从新按位置1开始,再次干掉全部奇数位置处的人,依此类推,直到最后剩下一个人为止,剩下的这个人为幸存者。
建立犯人类:
package d7.demo1;
public class Prisoner {
private int id;
private int place;
Prisoner(){
}
public Prisoner(int id, int place) {
this.id = id;
this.place = place;
}
public int getId() {
return id;
}
public int getPlace() {
return place;
}
public void setId(int id) {
this.id = id;
}
public void setPlace(int place) {
this.place = place;
}
@Override
public String toString() {
return "Prisoner{" +
"id=" + id +
", place=" + place +
'}';
}
}
text解决问题方法:
package d7.demo1;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class text {
public static List <Prisoner> prisoners= new ArrayList<>();
public static void main(String[] args) {
Random random=new Random();
for (int i = 1; i <=100 ; i++) {
int rd=random.nextInt(1,200)+1;
if (CanUser(rd,prisoners)) {
Prisoner prisoner = new Prisoner(rd, i);
prisoners.add(prisoner);
}
else i--;
}
System.out.println(prisoners.size());
kill();
System.out.println(prisoners.get(0));
}
public static boolean CanUser(int i,List<Prisoner> p){
for(Prisoner P: prisoners){
if(i==P.getId()){
return false;
}
}
return true;
}
public static void kill()
{
while (prisoners.size()>1){
List <Prisoner> prisoners2= new ArrayList<>();
for (int i = 1; i < prisoners.size() ; i+=2) {
Prisoner prisoner=prisoners.get(i);
prisoners2.add(prisoner);
}
prisoners=prisoners2;
}
System.out.println(prisoners.toString());
}
}
打印结果
文件包下载
有100名囚犯让他们依次站成一排国王命令手下先干掉全部奇数位置处的人再次干掉全部奇数位置处的直到最后剩下一个人为止剩最后幸存者资源-CSDN文库