สมมติว่าเราได้รับจำนวนมหาศาลและเราต้องค้นหาว่าการเรียงสับเปลี่ยนของตัวเลขนั้นหารด้วย 8 ลงตัวหรือไม่ ตัวเลขนั้นให้เราในรูปแบบสตริง
ดังนั้น หากอินพุตมีลักษณะดังนี้:input_num =4696984 ผลลัพธ์จะเป็น “หารด้วยแปด”
เพื่อแก้ปัญหานี้ เราจะตรวจสอบการเรียงสับเปลี่ยนสามหลักทั้งหมดที่เป็นไปได้ด้วยตัวเลขของตัวเลขนั้น และดูว่าสามารถเกิดขึ้นได้ในการเรียงสับเปลี่ยนตัวเลขทั้งหมดหรือไม่ หากการเรียงสับเปลี่ยนสามหลักหารด้วยแปดลงตัวเกิดขึ้นที่ส่วนท้ายของการเรียงสับเปลี่ยนของตัวเลขทั้งหมด เราจะบอกว่าการเรียงสับเปลี่ยนนั้นหารด้วย 8 ลงตัว
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้าความยาวของ input_num <3 แล้ว
- ถ้า input_num mod 8 เหมือนกับ 0 แล้ว
- คืนค่า True
- input_num :=ย้อนกลับของ input_num
- ถ้า input_num mod 8 เหมือนกับ 0 แล้ว
- คืนค่า True
- คืนค่าเท็จ
- ถ้า input_num mod 8 เหมือนกับ 0 แล้ว
- temp_arr :=รายการใหม่ของขนาด 10 เริ่มต้นโดย 0 วินาที
- สำหรับการนับในช่วง 0 ถึงขนาดของ input_num ให้ทำ
- temp_arr[input_num[count] - 0] :=temp_arr[input_num[count] - 0] + 1
- สำหรับการนับในช่วง 104 ถึง 999 เพิ่มขึ้น 8 ทำ
- อุณหภูมิ :=นับ
- เหตุการณ์ :=รายการใหม่ของขนาด 10 เริ่มต้นโดย 0 วินาที
- เหตุการณ์[ชั่วคราว mod 10] :=เหตุการณ์[temp mod 10] + 1
- อุณหภูมิ :=อุณหภูมิ / 10
- เหตุการณ์[ชั่วคราว mod 10] :=เหตุการณ์[temp mod 10] + 1
- อุณหภูมิ :=อุณหภูมิ / 10
- เหตุการณ์[ชั่วคราว mod 10] :=เหตุการณ์[temp mod 10] + 1
- อุณหภูมิ :=นับ
- ถ้าเกิดขึ้น[temp mod 10]> temp_arr[temp mod 10] แล้ว
- ติดตามตอนต่อไป
- อุณหภูมิ :=อุณหภูมิ / 10
- ถ้าเกิดขึ้น[temp mod 10]> temp_arr[temp mod 10] แล้ว
- ติดตามตอนต่อไป
- อุณหภูมิ :=อุณหภูมิ / 10
- ถ้าเกิดขึ้น[temp mod 10]> temp_arr[temp mod 10] แล้ว
- ติดตามตอนต่อไป
- คืนค่า True
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
def solve(input_num): if len(input_num) < 3: if int(input_num) % 8 == 0: return True input_num = input_num[::-1] if int(input_num) % 8 == 0: return True return False temp_arr = 10 * [0] for count in range(0, len(input_num)): temp_arr[int(input_num[count]) - 0] += 1 for count in range(104, 1000, 8): temp = count occurences = 10 * [0] occurences[int(temp % 10)] += 1 temp = temp / 10 occurences[int(temp % 10)] += 1 temp = temp / 10 occurences[int(temp % 10)] += 1 temp = count if (occurences[int(temp % 10)] > temp_arr[int(temp % 10)]): continue temp = temp / 10 if (occurences[int(temp % 10)] > temp_arr[int(temp % 10)]): continue temp = temp / 10 if (occurences[int(temp % 10)] > temp_arr[int(temp % 10)]): continue return True return False if solve("4696984"): print("Divisible by eight") else: print("Not divisible by eight")
อินพุต
4696984
ผลลัพธ์
Divisible by eight