การคูณระหว่างจำนวนเต็ม 2 ตัวสามารถลดลงเป็นชุดการบวกได้
3 * 5 = 3 + 3 + 3 + 3 + 3 = 5 + 5 + 5
การยกกำลัง (ยกกำลังaไปยังพลังงานb ) สามารถลดลงเป็นชุดของการคูณ:
5 ^ 3 = 5 * 5 * 5
ดังนั้นการยกกำลังจะลดลงเป็นชุดของการเพิ่มเติมโดยการสร้างการแสดงออกคูณจากนั้นเป็นชุดของการเพิ่ม ตัวอย่างเช่น5 ^ 3
(5 cubed) สามารถเขียนใหม่เป็น
5 ^ 3 = 5 * 5 * 5
= (5 + 5 + 5 + 5 + 5) * 5
= (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5)
= 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5
งานของคุณคือให้นิพจน์ที่รวมเข้าด้วยกันประกอบด้วยการยกกำลังการคูณและการเพิ่มลดให้เป็นชุดการย่อที่สั้นที่สุด นิพจน์ "shortest" ถูกกำหนดเป็นนิพจน์ที่มีจำนวน+
สัญลักษณ์น้อยที่สุดโดยยังคงใช้เพียงหนึ่งในสองหมายเลขในนิพจน์ดั้งเดิม ยกตัวอย่างเช่นการแสดงออกที่สั้นที่สุดของคือ10 * 2
10 + 10
ตัวเลขที่เกี่ยวข้องในการป้อนข้อมูลทั้งหมดจะเป็นจำนวนเต็มบวกและนิพจน์จะประกอบด้วยเฉพาะ+
(เพิ่มเติม), *
(การคูณ) และ^
(การยกกำลัง) พร้อมด้วยจำนวนเต็มและวงเล็บ ( ()
) เพื่อระบุความสำคัญ
ผลลัพธ์ควรประกอบด้วยจำนวนเต็มและ+
สัญลักษณ์บวกเท่านั้น คุณไม่ควรส่งออกแต่ละขั้นตอนของการลดเพียงผลลัพธ์สุดท้าย ผลลัพธ์อาจไม่ประกอบด้วยตัวเลขใด ๆ ที่ไม่ปรากฏในอินพุต อย่างไรก็ตามคุณสามารถใช้สัญลักษณ์ที่แตกต่างกัน 3 แบบแทน+*^
แต่โปรดพูดว่าเป็นสัญลักษณ์ใด
ช่องว่างแยกปัจจัยการผลิตและผลอาจจะหรืออาจจะไม่ได้ถูกนำมาใช้ในโปรแกรมของคุณคือ3 * 5
สามารถออกมาเป็นอย่างใดอย่างหนึ่งหรือ5 + 5 + 5
5+5+5
โปรดทราบว่าในกรณีส่วนใหญ่การเพิ่มจะไม่ดำเนินการจริง กรณีเดียวที่จะทำการเพิ่มคือเมื่อคุณมีบางสิ่งบางอย่างเช่น5 ^ (1 + 2)
ซึ่งในกรณีนี้จำเป็นต้องเพิ่มต่อ-> 5 ^ 3 -> 5 * 5 * 5 -> ...
ไป ดูกรณีทดสอบ # 4
รหัสของคุณไม่จำเป็นต้องจัดการกับอินพุตที่มาถึงนิพจน์ที่ไม่ชัดเจน ตัวอย่างเช่น(2 + 2) * (4 + 1)
. เนื่องจากกฎที่กำหนดไว้จนถึงตอนนี้เป้าหมายไม่ได้คำนวณคำตอบเป้าหมายจึงทำให้การเพิ่มเติมนั้นง่ายขึ้น ดังนั้นผลลัพธ์อาจแตกต่างกันไปขึ้นอยู่กับลำดับที่นิพจน์ได้รับการแก้ไขหรือเปลี่ยนเป็น (การเพิ่มเติมใดที่จะทำให้ง่ายขึ้น อีกตัวอย่างที่ไม่ถูกต้อง: ((3 + 2) ^ 2) ^ 3 -> ((3 + 2) * (3 + 2)) ^ 3 -> ???
.
นี่คือรหัส - กอล์ฟเพื่อให้ได้รหัสที่สั้นที่สุด
กรณีทดสอบ
Input => output
5 ^ 3 + 4 * 1 ^ 5 => 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4
2 ^ 1 * 2 + 3 + 9 => 2 + 2 + 3 + 9
2 ^ 1 * (2 + 3) + 9 => 2 + 3 + 2 + 3 + 9
2 ^ (1 * (2 + 3)) + 9 => 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 9
10 + 3 * 2 + 33 ^ 2 => 10 + 3 + 3 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33
100 * 3 => 100 + 100 + 100
2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1 => 2 + 2 + 2 + 2 + 8
(1 + 2 + 5 * 8 + 2 ^ 4) * 2 => 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2
using only one of the two numbers in the original expression.
แต่การแสดงออกดั้งเดิมสามารถมีได้มากกว่าสองตัวเลข ฉันไม่ได้รับเหตุผลที่ไม่ได้เป็นที่ถูกต้องสำหรับการส่งออก8 + 8
2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1
คำถามนี้ยังไม่ชัดเจนสำหรับฉัน
**
แทนได้^
ไหม