Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรม Python หาจำนวนที่ตรงกันในอาร์เรย์ที่มีคู่ของ (ฐาน, ตัวเลข)


สมมติว่าเราได้รับคู่ที่แตกต่างกันหลายคู่ในรูปแบบ (x, y) ในที่นี้ x หมายถึงฐานของตัวเลข และ y หมายถึงตัวเลขนั้นเอง ในรายการมีคู่ที่มีความหมายเหมือนกัน เราต้องตรวจสอบจำนวนการแข่งขันในคู่ตัวเลขที่กำหนด คู่ที่ระบุสามารถซ้ำซ้อนได้ และยังสามารถมีชุดค่าผสมของเลขฐานที่ไม่ถูกต้องได้อีกด้วย

ดังนั้น หากอินพุตเป็นเหมือน num_inputs =2, input_arr =[(10, 15), (8, 17)] ผลลัพธ์จะเป็น 1

ตัวแปร num_inputs ระบุจำนวนอินพุต และอาร์เรย์ input_arr แสดงรายการคู่ตัวเลข นี่ถ้าเราดูทั้งสองคู่ 15 ในฐาน 10 (ทศนิยม) เท่ากับ 17 ในฐาน 8 (ฐานแปด) มีการจับคู่หนึ่งรายการและเราคืนค่าเอาต์พุต 1

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • arr_len :=ขนาดของ input_arr

  • temp_dict :=แผนที่ใหม่ที่มีค่าจำนวนเต็ม

  • สำหรับฉันอยู่ในช่วง 0 ถึง num_inputs ทำ

    • num_base :=การแสดงสตริงของหมายเลขแรกของคู่ i ใน input_arr

    • num_val :=การแสดงสตริงของหมายเลขที่สองของคู่ i ใน input_arr

    • temp_dict[การแสดงจำนวนเต็มของ(num_val, การแทนค่าจำนวนเต็มของ(num_base)) ] :=temp_dict[การแสดงจำนวนเต็มของ(num_val, การแทนค่าจำนวนเต็มของ(num_base)) ] + 1

  • cnt :=0
  • สำหรับแต่ละค่าในรายการค่าทั้งหมดของ temp_dict ให้ทำ
    • cnt :=cnt + value* ค่าพื้นของ ((value - 1) / 2)
  • คืนสินค้า

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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)]))

อินพุต

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

ผลลัพธ์

1