ppgjx 发表于 2022-8-11 14:52

java 算法请教

本帖最后由 ppgjx 于 2022-8-11 14:56 编辑

我现在有个需求,就是给你一个额定的天数比如150天,再给你一个任务数量,比如50次,要求在120天内把50次消耗完,但要是随机时间的,如果这个次数大于天数就要考虑一天做两次,这两次在一天的时间里也是必须是随机时间的,如何处理这个随机时间呢?主要是 他要求是这个任务分配应该是看似是正常的,比如两三天做一次,不能是那种到了150天,把50次都分配到一天去了,很头疼这个问题 ,我目前做的是 150 / 50 求出平均每三天做一次,然后每次都是在1-3这个区间加天数,但是如果是次数大于天数我就不知道咋办了,还有这个时间如代码我只是再原有的时间加一天,没有办法做到在一天的时间内随机抽取一个时间做 , 而且我这个代码while (day >= ave )可能会导致次数做不完的问题


       //天数
      int day = 150;

      //任务数量
      int taskCount = 50;

      //平均每次任务需要几天
      int ave = day / taskCount;

      Calendar calendar = Calendar.getInstance();
      calendar.setTime(new Date());
      //获取150天之前的时间
      calendar.add(Calendar.DAY_OF_MONTH, -150);

      //总天数要大于平均天数 否则可能会有负数的问题 还会导致最后一次任务时间超过今天的时间
      while (day >= ave ){
            //随机天数
            int i = new Random().nextInt(ave) + 1;
            //添加天数
            calendar.add(Calendar.DAY_OF_MONTH, i);
            //总天数减去
            day = day- i;
            //输出天数
            System.out.println(DateUtil.date(calendar.getTime()));
      }

kiseyzed 发表于 2022-8-11 14:59

天数》》时数》》秒数》》毫秒数……
总有一个可以满足大于次数

yuluo829 发表于 2022-8-11 15:02

kiseyzed 发表于 2022-8-11 14:59
天数》》时数》》秒数》》毫秒数……
总有一个可以满足大于次数

这种应该发悬赏贴,

yuluo829 发表于 2022-8-11 15:03

这种应该发悬赏贴

sinab 发表于 2022-8-11 15:14


这种应该发悬赏贴

Cool_Breeze 发表于 2022-8-11 15:15

首先你得晓得每一个任务的完成时间是多久。知道了就解决了。

88868 发表于 2022-8-11 15:21

wihn 发表于 2022-8-11 15:44

要是真随机么,那当然就有可能比如50次全随机到了一天,那是没办法的事,因为是真随机。
我觉得你这种情况可以这样:150天按照要做的次数平均分,假设要做的次数是300次,那么一天里肯定有两个时刻是做事的对吧(觉得分不出来就150乘上24小时再分,以此类推),然后让这两个时刻随机在一定范围内浮动即可。

waper97 发表于 2022-8-11 16:02



这种应该发悬赏贴

rinima 发表于 2022-8-11 16:10

感谢楼主分享
页: [1] 2
查看完整版本: java 算法请教