• 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 --> 结果

    编码:

    1. public class TakePrize {
    2. public static void main(String[] args) {
    3. Scanner sc = new Scanner(System.in);
    4. System.out.print("请输入员工数量:");
    5. int len = sc.nextInt();
    6. System.out.print("随机生成员工号:");
    7. //调用方法1
    8. List list = norepeat(len);
    9. System.out.println(list.toString());
    10. //调用方法2
    11. List ll =show(list);
    12. System.out.println("员工分的奖金数:"+ll.toString());
    13. }
    14. /**
    15. * 开始遍历,并查找到第一个比自己大的数,那么就自己的奖金就是这个数减自己的数,如果没有,就自己的奖金就是本身随机数。
    16. * @param list
    17. * @return
    18. */
    19. private static List show(List list) {
    20. int flag = 0;
    21. List lists = new ArrayList<>();
    22. //循环比较
    23. for (int i = 0; i < list.size(); i++) {
    24. for (int j = i+1 ; j < list.size(); j++) {
    25. //判断前一个数是否大于后面的数
    26. if (list.get(i) < list.get(j)) {
    27. Integer money = (list.get(j) - list.get(i)) * (j - i);
    28. lists.add(money);
    29. flag = 1;
    30. break;
    31. }
    32. }
    33. //如果没有大于后面值
    34. if (flag == 0) {
    35. lists.add(list.get(i));
    36. }
    37. flag = 0; //重置
    38. }
    39. return lists;
    40. }
    41. /**
    42. * 随机数字不重复,员工数量(包含老板)范围1 ~ 10000
    43. *
    44. * @param count
    45. * @return
    46. */
    47. public static List norepeat(int count) {
    48. //随机对象
    49. Random random = new Random();
    50. //set集合对象
    51. Set set = new HashSet<>();
    52. //循环
    53. while (true) {
    54. //随机数范围1 ~ 10000
    55. // int number = random.nextInt(10000) + 1;
    56. int number = random.nextInt(10) + 1;
    57. set.add(number);
    58. //判断是否满足员工数量
    59. if (set.size() >= count) {
    60. break;
    61. }
    62. }
    63. //返回集合对象
    64. return new ArrayList<>(set);
    65. }
    66. }

    效果: 

     

     

  • 相关阅读:
    【JS】react antd 项目如何让Table组件表格滚动播放
    Java之spring新手教程(包教包会)
    【无标题】简析天津某产业园能耗监测系统设计与应用
    修改svc的LoadBalancer的IP引发的惨案
    颈椎神经分布立体图高清,颈椎神经分布立体图片
    模板层-过滤器和继承
    判断链表是否是环形链表
    无需百度网盘SVIP提速不限速满速下载方法,2种方法都亲自实测有效
    光纤激光切割机如何高效的切割铜等高反材料
    中文情感分类
  • 原文地址:https://blog.csdn.net/hlx20080808/article/details/132827228