Báo cáo vấn đề:
Joey muốn tìm một bộ ba số nguyên x, y và z sao cho nó thỏa mãn hai điều kiện này:
- [y+z] -x
- [y*z]*[-x]
trong đó A và B được đưa ra số nguyên đầu vào.
Thiết kế một chương trình Python lấy hai số nguyên làm đầu vào A và B và in các bộ ba này. Ngoài ra, in số lượng ba lần.
Ví dụ, nhập: Nhập A và B: 2 4Output: Đếm bộ ba: 10Triplets: [0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [ 0, 1, 1], [0, 2, 0], [1, 0, 0], [1, 0, 1], [1, 1, 0], [2, 0, 0]
Input:
Enter A and B: 2 4
Output:
Count of Triplets: 10
Triplets: [0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], [0, 2, 0], [1, 0, 0], [1, 0, 1], [1, 1, 0], [2, 0, 0]
Mã cho bộ ba với các thuộc tính trong Python::
#function for finding triplets def findTriplets[A,B]: triplets = [] for x in range[A+1]: for y in range[A-x+1]: for z in range[A-[x+y]+1]: if[y+z-x> list[iter_triplets[6]] [[0, 0, 6], [0, 1, 5], [0, 2, 4], [0, 3, 3], [1, 1, 4], [1, 2, 3], [2, 2, 2]] >>> list[iter_triplets[10]] [[0, 0, 10], [0, 1, 9], [0, 2, 8], [0, 3, 7], [0, 4, 6], [0, 5, 5], [1, 1, 8], [1, 2, 7], [1, 3, 6], [1, 4, 5], [2, 2, 6], [2, 3, 5], [2, 4, 4], [3, 3, 4]]
Nếu không bao gồm hoán vị [nghĩa là [1,2,3]
là cùng một bộ ba với [3,2,1]
], đi từ lớn nhất đến nhỏ nhất: [i.e. [1,2,3]
is the same triplet as [3,2,1]
],
going from largest to smallest:
import math
def iter_triplets[n]:
# This is the biggest number, can't be less than 1/3 of n
for i in range[n, math.ceil[n/3] - 1, -1]:
sum_left = n-i
# This is the second biggest number, can't be less than 1/2 of the sum_left and more than first number by definition.
# ceil to correct rounding errors.
for j in range[min[sum_left, i], math.ceil[[sum_left]/2] - 1, -1]:
yield [i, j, sum_left-j] # Last number is calculated.
>>> list[iter_triplets[10]]
[[10, 0, 0], [9, 1, 0], [8, 2, 0], [8, 1, 1], [7, 3, 0], [7, 2, 1], [6, 4, 0], [6, 3, 1], [6, 2, 2], [5, 5, 0], [5, 4, 1], [5, 3, 2], [4, 4, 2], [4, 3, 3]]
Nếu bao gồm các hoán vị [nghĩa là [1,2,3]
là một bộ ba khác với [3,2,1]
], đi từ nhỏ nhất đến lớn nhất: [i.e. [1,2,3]
is a different triplet than [3,2,1]
], going from smallest to largest:
def iter_triplet_permutations[n]:
for i in range[0, n+1]:
sum_left = n-i
for j in range[0, sum_left+1]:
yield [i, j, sum_left-j]
>>> list[iter_triplet_permutations[5]]
[[0, 0, 5], [0, 1, 4], [0, 2, 3], [0, 3, 2], [0, 4, 1], [0, 5, 0], [1, 0, 4], [1, 1, 3], [1, 2, 2], [1, 3, 1], [1, 4, 0], [2, 0, 3], [2, 1, 2], [2, 2, 1], [2, 3, 0], [3, 0, 2], [3, 1, 1], [3, 2, 0], [4, 0, 1], [4, 1, 0], [5, 0, 0]]