Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

얼마나 많은 큐브가 잘렸는지 알아내는 Python 프로그램

<시간/>

차원 a, b, c의 큐브가 여러 개 있고 이를 사용하여 axbxc 차원의 새 상자가 생성된다고 가정합니다. , b 및 c는 쌍별 공소수이고; gcd(a, b) =gcd(b,c) =gcd(c, d) =1. 그림과 같이 한 조각으로 상자를 두 조각으로 잘라야 합니다. 우리는 상자가 이런 식으로 절단되었는지, 얼마나 많은 큐브가 두 조각으로 절단되었는지 알아내야 합니다. 가능한 3차원을 포함하는 배열이 제공되며 그로부터 답을 찾아야 합니다.

얼마나 많은 큐브가 잘렸는지 알아내는 Python 프로그램

절단은 정점 P, Q, R을 통과하는 평면이 되는 방식으로 수행됩니다.

따라서 입력이 n =3, input_array =[[1, 2, 3], [4, 2, 5], [6, 8, 2]]인 경우 출력은 [5, 18, 37입니다. ]

주어진 3개의 다른 인스턴스가 있고 우리는 잘라낸 큐브의 수를 찾아야 합니다. 큐브가 그림과 같은 방식으로 절단된 경우; 5, 16, 37 큐브가 각각 잘립니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. &miuns;

  • 출력:=새 목록
  • 0에서 n 사이의 i에 대해
    • a :=input_array[i, 0]
    • b :=input_array[i, 1]
    • c :=input_array[i, 2]
    • val :=(a * b + a * c + b * c - 1) / 2 mod 1000000007의 하한값
    • 출력 끝에 val 삽입
  • 반환 출력

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

from math import ceil
def solve(n, input_array):
   output = []
   for i in range(n):
      a, b, c = input_array[i][0], input_array[i][1], input_array[i][2]
      val = ((a * b + a * c + b * c - 1) // 2 % 1000000007)
      output.append(val)
   return output
print(solve(3, [[1, 2, 3], [4, 2, 5], [6, 8, 2]]))

입력

3, [[1, 2, 3], [4, 2, 5], [6, 8, 2]]

출력

[5, 18, 37]