Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình Python để tìm ra số lượng kết quả phù hợp trong một mảng có chứa các cặp (cơ sở, số)

Giả sử, chúng ta được cung cấp một số cặp khác nhau ở định dạng (x, y). Ở đây, x biểu thị cơ số của một số và y biểu thị chính số đó. Trong danh sách có những cặp có nghĩa giống nhau. Chúng ta phải kiểm tra số lượng trùng khớp trong các cặp số đã cho. Các cặp đã cho có thể dư thừa và cũng có thể chứa các kết hợp số cơ sở không hợp lệ.

Vì vậy, nếu đầu vào giống như num_inputs =2, input_arr =[(10, 15), (8, 17)], thì đầu ra sẽ là 1.

Biến num_inputs chỉ định số lượng đầu vào và input_arr mảng liệt kê các cặp số. Ở đây nếu chúng ta nhìn vào hai cặp; 15 trong cơ số 10 (thập phân) cũng giống như 17 trong cơ số 8 (bát phân). Vì vậy, có một kết quả phù hợp và chúng tôi trả về giá trị đầu ra 1.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • arr_len:=kích thước của input_arr

  • temp_dict:=một bản đồ mới chứa các giá trị số nguyên

  • đối với tôi trong phạm vi từ 0 đến num_inputs, hãy thực hiện

    • num_base:=biểu diễn chuỗi của số đầu tiên của cặp i trong input_arr

    • num_val:=biểu diễn chuỗi của số thứ hai của cặp i trong input_arr

    • temp_dict [biểu diễn số nguyên của (num_val, biểu diễn số nguyên của (num_base))]:=temp_dict [biểu diễn số nguyên của (num_val, biểu diễn số nguyên của (num_base))] + 1

  • cnt:=0
  • đối với mỗi giá trị trong danh sách tất cả các giá trị của temp_dict, hãy thực hiện
    • cnt:=cnt + value * giá trị sàn của ((value - 1) / 2)
  • trả về cnt

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

from collections import defaultdict
def solve(num_inputs, input_arr):
   arr_len = len(input_arr)
   temp_dict = defaultdict(int)
   for i in range(num_inputs):
      num_base, num_val = str(input_arr[i][0]), str(input_arr[i][1])
      temp_dict[int(num_val, int(num_base))] += 1
   cnt = 0
   for value in temp_dict.values():
      cnt += value*(value - 1)//2
   return cnt
print(solve(2, [(10, 15), (8, 17)]))

Đầu vào

2, [(10, 15), (8, 17)]

Đầu ra

1