JAVA -华为真题-分奖金

需求:

公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得"距离 * 数字差值"的奖金。如果遇不到比自己数字大的,就给自己分配随机数数量的奖金。

例如,按照工号顺序的随机数字是:2,10,3。

第2个员工的数字10比第1个员工的数字2大,所以,第1个员工可以获得1 * (10-2)=8。

第2个员工后面没有比他数字更大的员工,所以,他获得他分配的随机数数量的奖金,就是10。

第3个员工是最后一个员工,后面也没有比他更大数字的员工,所以他得到的奖金是3。

请帮老板计算一下每位员工最终分到的奖金都是多少钱。

输入描述:

第一行n表示员工数量(包含最后一个老板)

第二是每位员工分配的随机数字

输出描述:

最终每位员工分到的奖金数量
输入:

3 -->个数

2 10 3 -->随机数

输出:

8 10 3 --> 结果

编码:

java 复制代码
public class TakePrize {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入员工数量:");
        int len = sc.nextInt();

        System.out.print("随机生成员工号:");
        //调用方法1
        List<Integer> list = norepeat(len);
        System.out.println(list.toString());

        //调用方法2
        List<Integer> ll =show(list);
        System.out.println("员工分的奖金数:"+ll.toString());
    }

    /**
     * 开始遍历,并查找到第一个比自己大的数,那么就自己的奖金就是这个数减自己的数,如果没有,就自己的奖金就是本身随机数。
     * @param list
     * @return
     */
    private static List<Integer> show(List<Integer> list) {
        int flag = 0;
        List<Integer> lists = new ArrayList<>();
        //循环比较
        for (int i = 0; i < list.size(); i++) {
            for (int j = i+1 ; j < list.size(); j++) {
                //判断前一个数是否大于后面的数
                if (list.get(i) < list.get(j)) {
                    Integer money = (list.get(j) - list.get(i)) * (j - i);
                    lists.add(money);
                    flag = 1;
                    break;
                }
            }
            //如果没有大于后面值
            if (flag == 0) {
                lists.add(list.get(i));
            }
            flag = 0; //重置
        }
        return lists;
    }


    /**
     * 随机数字不重复,员工数量(包含老板)范围1 ~ 10000
     *
     * @param count
     * @return
     */
    public static List<Integer> norepeat(int count) {
        //随机对象
        Random random = new Random();
        //set集合对象
        Set<Integer> set = new HashSet<>();
        //循环
        while (true) {
            //随机数范围1 ~ 10000
//            int number = random.nextInt(10000) + 1;
            int number = random.nextInt(10) + 1;
            set.add(number);
            //判断是否满足员工数量
            if (set.size() >= count) {
                break;
            }
        }
        //返回集合对象
        return new ArrayList<>(set);
    }
}

效果:

相关推荐
kangkang-2 小时前
PC端基于SpringBoot架构控制无人机(三):系统架构设计
java·架构·无人机
界面开发小八哥4 小时前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
idolyXyz4 小时前
[java: Cleaner]-一文述之
java
一碗谦谦粉5 小时前
Maven 依赖调解的两大原则
java·maven
netyeaxi5 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
收破烂的小熊猫~5 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
猴哥源码5 小时前
基于Java+SpringBoot的动物领养平台
java·spring boot
老任与码5 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
小兵张健5 小时前
武汉拿下 23k offer 经历
java·面试·ai编程
FreeBuf_6 小时前
Apache组件遭大规模攻击:Tomcat与Camel高危RCE漏洞引发数千次利用尝试
java·tomcat·apache