สมมติว่าเราได้รับคู่ที่แตกต่างกันหลายคู่ในรูปแบบ (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