公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得“距离 * 数字差值”的奖金。如果遇不到比自己数字大的,就给自己分配随机数数量的奖金。
例如,按照工号顺序的随机数字是:2,10,3。
第2个员工的数字10比第1个员工的数字2大,所以,第1个员工可以获得1 * (10-2)=8。
第2个员工后面没有比他数字更大的员工,所以,他获得他分配的随机数数量的奖金,就是10。
第3个员工是最后一个员工,后面也没有比他更大数字的员工,所以他得到的奖金是3。
请帮老板计算一下每位员工最终分到的奖金都是多少钱。
输入描述:
第一行n表示员工数量(包含最后一个老板)
第二是每位员工分配的随机数字输出描述:
最终每位员工分到的奖金数量
输入:
3 -->个数
2 10 3 -->随机数
输出:
8 10 3 --> 结果
- 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
list = norepeat(len); - System.out.println(list.toString());
-
- //调用方法2
- List
ll =show(list); - System.out.println("员工分的奖金数:"+ll.toString());
- }
-
- /**
- * 开始遍历,并查找到第一个比自己大的数,那么就自己的奖金就是这个数减自己的数,如果没有,就自己的奖金就是本身随机数。
- * @param list
- * @return
- */
- private static List
show(List list) { - int flag = 0;
- List
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
norepeat(int count) { - //随机对象
- Random random = new Random();
- //set集合对象
- Set
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);
- }
- }