检查所有人是否都可以使用Python在两台计算机上投票

假设我们有一个数字n代表n个人,并且有两个相同的投票机。我们还有一个名为time的数组,大小为n,因此time [i]表示第i个人在任何机器上投票所花费的总时间。在一瞬间,两台机器上只有一个人可以在那里。我们还有另一个值x,代表机器可操作的最大允许时间,我们必须检查所有人是否都可以投票。

因此,如果输入像n = 3,x = 7,时间= [3,5,3],那么输出将为True。因为在时间t0,第0个人去了第一台机器,而第一个人去了第二台机器。现在,在时间t3,第一台机器是免费的。现在第二个人去第一台机器,在时间t5第二台机器是免费的,在时间t6第一台机器是免费的,所以所有参与者都及时投票。

为了解决这个问题,我们将遵循以下步骤-

  • total_sum:=时间的所有元素之和

  • 如果total_sum <= x,则

    • 返回True

  • 排序列表时间

  • prev_sum:=与时间大小相同的数组,并用0填充

  • prev_sum [0]:=时间[0]

  • 对于范围1至prev_sum大小的i,执行

    • prev_sum [i]:= prev_sum [i-1] +时间[i]

  • 对于范围在0至prev_sum大小的i,执行

    • temp_sum:= prev_sum [i] +(总和-prev_sum [j])

    • 如果temp_sum <= x且total_sum-temp_sum <= x,则

    • 返回True

    • 对于范围i + 1至prev_sum-1的j

    • 返回False

    让我们看下面的实现以更好地理解-

    示例

    def solve(n, x, time):
       total_sum = sum(time)   if total_sum <= x:
          return True
       time.sort()   prev_sum = [0 for i in range(len(time))]
       prev_sum[0] = time[0]
       for i in range(1, len(prev_sum)):
          prev_sum[i] = prev_sum[i - 1] + time[i]
       for i in range(0, len(prev_sum)):
          for j in range(i + 1, len(prev_sum)):
             temp_sum = (prev_sum[i] + (total_sum - prev_sum[j]))
             if temp_sum <= x and total_sum - temp_sum <= x:
                return True
       return False
    n = 3
    x = 7
    time = [3, 5, 3]
    print(solve(n, x, time))

    输入值

    3, 7, [3, 5, 3]
    输出结果
    True