通过阵列试图循环,并保持记得最后一个位置

问题描述 投票:0回答:1

我有一个小任务,我不能管理来完成。

*目标,你最近被分配到分析和监督的一个新的游乐园的中心。你的任务是估计每天什么收益将是每个乘坐的那一天。你可以通过看过山车开始。

规则您发现人们喜欢过山车,以至于只要他们已经完成了一搭,便不禁回一个又一个。人们在吸引它们可以是单独或一组前排队。当基团是在队列中,它们不一定要一起骑,而不被分离。人们从来没有在队列中你追我赶。当没有在吸引足够的空间在队列中的下一组,骑启动(所以它并不总是充满)。只要搭结束后,出来的群体,重新回到以相同的顺序排队。*

    var limited_number_of_seats_per_ride   = 3, //L
        limited_number_of_turns_per_ride   = 3, //C
        limited_number_of_groups_in_queue  = 4, //N
        number_of_person_per_group         = [3,1,1,2]; //P

   function earning_per_day(P,L,C,price){

      /**
      *
      * @P              {array}      number of person per group.
      * @L              {int}        limited number of seats per ride.
      * @C              {int}        limited number of times the ride goes per day.
      * @price          {int}        price per person per ride.
      *
      * @daily_earning {int}         estimated daily earnings.
      */

      var daily_earning = 0;
      var total_per_ride = 0;
      // calculates sum of the earning for each ride per day
      for (var j = 0; j < C; j++) {
        total_per_ride = 0;
        position_i = 0;
        // calculates the number of person on each ride
        for (var i = position_i; i < P.length; i++){
          while((total_per_ride + P[i+1]) < L){
            total_per_ride += P[i];
            console.log(i + ' total_per_ride = ' + total_per_ride);
          }
          position_i = i;
          console.log('position_i = ' + position_i);
        }
        daily_earning += total_per_ride;
        console.log('daily_earning ' + daily_earning);
      }
    }

    // calling
    earning_per_day(number_of_person_per_group, limited_number_of_seats_per_ride, limited_number_of_turns_per_ride, 1);

这是我到目前为止所。但是,我有一个想法,我无法管理到位。由于规则规定,“人们喜欢过山车,以至于只要他们已经完成了一搭,便不禁回一个又一个”。我想保存在它结束的那一刻循环的位置,并重新启动,准确的同一位置的循环。避免我推和元素转移到阵列的最后一个位置。

有人可以给我如何进行提示吗?

非常感谢你 !

瑞安

javascript
1个回答
0
投票

我已经更新一点你的逻辑。

在过去的P不断循环我已经使用增量指标position_iposition_i = (position_i + 1) % P.length;

没有必要对内部for (var i = position_i; i < P.length; i++){。刚刚更新while(){...}

var limited_number_of_seats_per_ride = 3, //L
  limited_number_of_turns_per_ride = 3, //C
  limited_number_of_groups_in_queue = 4, //N
  number_of_person_per_group = [3, 1, 1, 2]; //P

function earning_per_day(P, L, C, price) {

  /**
   *
   * @P              {array}      number of person per group.
   * @L              {int}        limited number of seats per ride.
   * @C              {int}        limited number of times the ride goes per day.
   * @price          {int}        price per person per ride.
   *
   * @daily_earning {int}         estimated daily earnings.
   */

  var daily_earning = 0;
  var position_i = 0;
  console.log('---daily_earning : ' + daily_earning + '---');

  // calculates sum of the earning for each ride per day
  for (var j = 0; j < C; j++) {
  console.log('---Ride ' + (j + 1) + '---');
    var total_per_ride = 0;
    // calculates the number of person on each ride
    // for (var i = position_i; i < P.length; i++){
    while ((total_per_ride + P[position_i]) <= L) {
      total_per_ride += P[position_i];    
      position_i = (position_i + 1) % P.length;
    }
    console.log('total_per_ride = ' + total_per_ride);
    console.log('New Start position_i = ' + position_i);
    // }
    daily_earning += total_per_ride;
    console.log('daily_earning ' + daily_earning);
  }
}

// calling
earning_per_day(number_of_person_per_group, limited_number_of_seats_per_ride, limited_number_of_turns_per_ride, 1);
© www.soinside.com 2019 - 2024. All rights reserved.