ฉันมีเคาน์เตอร์ เป็นอุปกรณ์ขนาดเล็กที่มีลักษณะดังนี้:
การแสดงผลไปจากการ0000
9999
มีปุ่มกดเล็ก ๆ ที่ด้านบนที่เพิ่มการนับ 1 และลูกบิดเล็ก ๆ ด้านขวาซึ่งมีจุดประสงค์เพื่อรีเซ็ตตัวนับกลับเป็น 0
ตอนนี้สิ่งที่เกี่ยวกับปุ่มเล็ก ๆ คือถ้าคุณหมุนไปข้างหลังคุณสามารถเพิ่มตัวเลขใด ๆ ที่คุณต้องการได้เมื่อคุณหมุนมันไปข้างหน้าอีกครั้ง ดังนั้นถ้าฉันกดปุ่มนับ 10 ครั้งเพื่อให้การแสดงที่เคาน์เตอร์0010
ผมแล้วสามารถเปิดย้อนกลับลูกบิดจนกว่าฉันจะได้ยินเสียงคลิกเล็ก ๆ 0090
แล้วเปิดไปข้างหน้าอีกครั้งและทำให้มันตรงไปที่
แต่ลูกบิดจะเพิ่มตัวเลขที่เกิดขึ้นทั้งหมด 1 เสมอทุกครั้งที่ผลักตัวเลขไปข้างหน้า ดังนั้นหากการแสดงที่เคาน์เตอร์6060
คุณสามารถทำให้มันเพิ่มขึ้นเป็น7070
ไม่หรือ6070
7060
นอกจากนี้ลูกบิดจะม้วน9
s ไป0
โดยไม่ดำเนินการดังนั้น0990
จะเลื่อนไป0000
แทนหรือ1000
1100
ฉันต้องการทราบวิธีที่มีประสิทธิภาพที่สุดในการตั้งค่าตัวนับเป็นตัวเลขที่แน่นอน งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่จะกำหนดลำดับที่สั้นที่สุดของการกดปุ่มและความก้าวหน้าของปุ่มที่จำเป็นในการทำเช่นนั้น
โปรแกรมของคุณจะป้อนตัวเลข 4 หลักจาก0000
ถึง9999
และส่งคืนชุดของขั้นตอนในรูปแบบต่อไปนี้:
> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678
โดยที่C
สำหรับ "กดปุ่มตัวนับ" และตัวเลขใด ๆD
จาก 0 ถึง 9 หมายถึง "ใช้ปุ่มหมุนเพื่อเลื่อนการเกิดเหตุการณ์ทั้งหมดD
ด้วย 1"
โปรแกรมของคุณต้องสร้างลำดับขั้นตอนที่ถูกต้องสำหรับชุดตัวเลขสี่หลักที่เป็นไปได้ทั้งหมดและจะได้คะแนนตามจำนวนขั้นตอนทั้งหมดที่จำเป็นสำหรับ 10,000 ราย ในกรณีที่เสมอกัน (เป็นไปได้มากที่สุดเมื่อพบอัลกอริธึมที่เหมาะสมที่สุด) รหัสที่สั้นกว่าจะชนะ
0010
เป็น0020
ในกรณีนั้นหรือไม่? หรือคุณสามารถหมุนปุ่มย้อนกลับได้เท่านั้น? และเช่นกันแต่ละตัว "D" จะนับเป็นจำนวน "D" ของความก้าวหน้าของปุ่มหมุน (เช่น1234567
หมายถึงหมุนลูกบิด 1 ครั้งจากนั้น 2 ครั้งจากนั้น 3 ครั้งแล้ว 3 ครั้งเป็นต้น) หรือว่าหมายถึงการหมุนลูกบิดแยกกัน (เช่น1234567
หมายถึงการหมุนลูกบิด 7 ครั้ง) หรือไม่?