Java:实战题目(一)

第一题

需求:

目前有100名囚犯,每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号(要求这些囚犯的编号是不能重复的),然后让他们依次站成一排。(注:位置是从1开始计数的),接下来,国王命令手下先干掉全部奇数位置处的人。剩下的人,又从新按位置1开始,再次干掉全部奇数位置处的人,依此类推,直到最后剩下一个人为止,剩下的这个人为幸存者。

具体功能点的要求如下:

请输出幸存者的编号,以及他第一次所占的位置值是多少。

评分细则

1.能做出第一步:生产100个随机编号,且占位成功的,给3分。
2.能成功删除奇数位置处的数据的,给5分。
3.能正确获取结果的给2分。

一个囚犯代表一个对象,所以先创建对象类

public class People {
    private int code;//编号
    private int location;//位置

    public People() {
    }

    public People(int code, int location) {
        this.code = code;
        this.location = location;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public int getLocation() {
        return location;
    }

    public void setLocation(int location) {
        this.location = location;
    }

    @Override
    public String toString() {
        return "People{" +
                "code=" + code +
                ", location=" + location +
                '}';
    }
}

接下来在测试类中

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class test {
    //目标完成幸存者案例
    //1.由于每个囚犯都是一个对象,并且我们需要每个囚犯的位置和编号,所以我们把囚犯定义成对象来实现这个案例会更好
    //2.创建100个囚犯,依次占位,并为其赋值编号(1-200之间的随机数:不能重复)
    public static List<People> peoples = new ArrayList<>();
    public static void main(String[] args) {
        //3.循环100次,创建100个囚犯,存入集合
        Random r = new Random();
        for (int i = 1; i <=100 ; i++) {
            int code = r.nextInt(200)+1;
            //判断这个编号是否唯一,定义成一个方法
            if (isCanUse(code)) {
                People p = new People(code,i);
                peoples.add(p);
            }else {
                i--;
            }
        }
        System.out.println("囚犯信息"+peoples);

        //4.反复删除奇数位置处的人,直到剩余一个人为止。
        //peoples = [p1,p2,p3,p4,p5]
        //            0  1  2  3  4
        while (peoples.size() > 1){
            //干掉奇数位置处的人,那不就是留下偶数位置处的人嘛
            List<People> tempPeoples =new ArrayList<>();//创建一个临时集合
            for (int i = 1; i < peoples.size(); i+=2) {
                People p = peoples.get(i);
                tempPeoples.add(p);
            }
            peoples = tempPeoples;//挑出偶数位置的人[p2,p4,p6.....]
        }
        People luckPeople = peoples.get(0);//此时集合里面就剩下一个人了
        System.out.println(luckPeople);
    }

    public static boolean isCanUse(int code){
        for(People people : peoples){
            if (people.getCode() ==code){
                return false;//重复了,不能用
            }
        }
        return true;
    }
}

你可能感兴趣的:(java,开发语言,idea)