คำถามนี้ได้รับแรงบันดาลใจจากคำตอบนี้ บังเอิญฉันเคยใช้การคูณเอธิโอเปียเมื่อฉันยังเป็นเด็ก แต่ไม่เคยรู้จักชื่อของวิธีนี้มาก่อนจนกระทั่งเมื่อไม่นานมานี้
การคูณเอธิโอเปียเป็นวิธีการคูณจำนวนเต็มโดยใช้การบวก, การเพิ่มและการแบ่งครึ่งเท่านั้น
วิธี:
- นำตัวเลขสองตัวมาคูณและจดไว้ที่ด้านบนของสองคอลัมน์
- ในคอลัมน์ซ้ายมือให้ลดจำนวนสุดท้ายซ้ำ ๆ ละครึ่งละทิ้งเศษที่เหลือและเขียนผลลัพธ์ด้านล่างสุดท้ายในคอลัมน์เดียวกันจนกว่าคุณจะเขียนค่า 1
- ในคอลัมน์ด้านขวาซ้ำสองครั้งเป็นจำนวนสุดท้ายและเขียนผลลัพธ์ด้านล่าง หยุดเมื่อคุณเพิ่มผลลัพธ์ในแถวเดียวกับที่คอลัมน์ซ้ายมือแสดง 1
- ตรวจสอบตารางที่สร้างและทิ้งแถวใด ๆ ที่ค่าในคอลัมน์ด้านซ้ายเป็นเลขคู่ รวมค่าในคอลัมน์ขวามือที่ยังคงอยู่เพื่อสร้างผลลัพธ์ของการคูณสองตัวเลขเดิมเข้าด้วยกัน
ตัวอย่างเช่น: 17 x 34
17 34
แบ่งครึ่งคอลัมน์แรก:
17 34
8
4
2
1
สองเท่าของคอลัมน์ที่สอง:
17 34
8 68
4 136
2 272
1 544
แถวนัดหยุดงานซึ่งมีเซลล์แรกเป็นคู่เราจะทำสิ่งนี้โดยการใส่ตัวเลขเหล่านั้นทางด้านขวาในวงเล็บเหลี่ยม:
17 34
8 [68]
4 [136]
2 [272]
1 544
รวมตัวเลขที่เหลืออยู่ในคอลัมน์ทางขวา:
17 34
8 [68]
4 [136]
2 [272]
1 544
=====
578
ดังนั้น 17 คูณด้วย 34, โดยวิธีเอธิโอเปียคือ 578
งาน:
รหัสกอล์ฟที่ใช้ตัวเลขสองตัวระหว่าง 1 ถึง 1,000 และใช้เค้าโครงและอัลกอริธึมเดียวกันแสดงผลิตภัณฑ์ด้านล่าง
วิธีการป้อนข้อมูล: อย่างไรก็ตามคุณเลือก ...
อินพุตตัวอย่าง:
19 427
ผลลัพธ์ที่ได้:
19 427
9 854
4 [1708]
2 [3416]
1 6832
======
8113
โปรดทราบการจัดตำแหน่งของตัวเลข สิ่งนี้สำคัญที่สุดในโครงร่าง นอกจากนี้โปรดทราบว่าเส้นคู่ที่จัดวางโดยเครื่องหมายเท่ากับต้องมีความยาวสองอักขระเกินกว่าคำตอบโดยรวมและต้องอยู่กึ่งกลาง
การทดสอบ
คุณจะทดสอบสิ่งนี้อย่างไร โดยการให้โปรแกรมของคุณทำงานโดยใช้ตัวเลขสองตัว หมายเลขเหล่านี้สามารถดึงมาจากหมายเลข ID ผู้ใช้ของคุณ (ซึ่งสามารถรับได้โดยการเลื่อนเคอร์เซอร์ไปที่รูปประจำตัวของคุณในหน้าต่างด้านบน) ใช้หมายเลขของคุณและนำตัวเลขสามหลักสุดท้ายซึ่งจะเป็นหมายเลข B นำสิ่งอื่นที่เหลืออยู่ที่ด้านหน้าซึ่งจะเป็นหมายเลข A จากนั้นทดสอบ A ครั้ง B
ตัวอย่างการทดสอบ:
หมายเลข ID ผู้ใช้ของฉันคือ 8555 ดังนั้นตัวเลขของฉันคือ 8 และ 555 ดังนั้นผลลัพธ์ของฉันควรเป็นดังนี้:
8 [555]
4 [1110]
2 [2220]
1 4440
======
4440
ข้อ จำกัด:
ไม่มีตัวดำเนินการคูณแบบดั้งเดิมที่ได้รับอนุญาตให้บันทึกในการใช้ "เสแสร้ง" ตามที่กล่าวไว้ในอัลกอริทึม กล่าวอีกนัยหนึ่งหากคุณใช้โอเปอเรเตอร์เช่น * จะสามารถใช้สำหรับการคูณด้วย 2 เท่านั้น
รายการที่ไม่เป็นไปตามนี้จะไม่ได้รับการพิจารณาและผู้ใช้จะถูกพาออกจากสถานที่ด้วยกล่องกระดาษที่เต็มไปด้วยข้าวของ แต่ละรายการจะมีรหัสรวมถึงการทดสอบตามหมายเลข ID ผู้ใช้ของคุณ
นี่คือรหัสกอล์ฟ จำนวนไบต์ที่สั้นที่สุดจะได้รับรางวัลเกียรติยศและความชื่นชมจากเพื่อน ๆ ของพวกเขา ... (และอาจเป็น Lamborghini ... ฉันพูดว่า "อาจจะ"!)
*
หรือx
) แต่เป็นไปไม่ได้ที่จะตรวจสอบว่ามีการใช้การคูณหรือไม่ ยกเว้นส่วนนั้นความท้าทายนั้นน่าสนใจ