"ชาวนาคนหนึ่งมีก้อนหินก้อนหนึ่งหนัก 40 กิโลกรัมไว้สำหรับใช้ชั่งสิ่งของแบบตราชั่งสมดุล, วันหนึ่งหินก้อนนี้ถูกเพื่อนบ้านยืมไป และหลังจากนั้นไม่นานเพื่อนบ้านก็นำหินกลับมาคืน พร้อมกับกล่าวคำขอโทษที่ได้ทำหินแตกออกเป็น 4 ส่วนไปเสียแล้ว แต่ชาวนาได้บอกกลับไปว่าไม่ต้องขอโทษหรอก เพราะกลับดีเสียอีกที่ทำให้เขาสามารถชั่งสิ่งของได้ตั้งแต่ 1 กิโลกรัม, 2, 3, .. ไปจนถึง 40 กิโลกรัมได้เลย"

คำถามคือ หินทั้งสี่ก้อนนั้นมีน้ำหนักเท่าไร โดยที่แต่ละก้อนมีน้ำหนักเป็นเลขจำนวนเต็ม ?

(โจทย์คงไม่ได้ยากเกินไปนะครับ)

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

แถมให้ข้อนึง

มีเหรียญอยู่ 8 เหรียญ มีเหรียญปลอมซึ่งน้ำหนักเบากว่า ผมมีตราชั่งเที่ยงตรง(สมดุล)ให้ อยากถามว่าต้องชั่งอย่างมากที่สุด น้อยสุดกี่ครั้งถึงจะรู้ว่าเหรียญปลอมคือเหรียญไหน

ถูกครับ

วิธีคือแบ่งเหรียญเป็น 3 3 2

  1. ชั่งครั้งที่ 1 เอากองสามเหรียญมาชั่ง

2.1 ถ้าหนักเท่ากัน แปลว่าเหรียญเบาอยู่ในกองสองเหรียญ เอามาชั่งครั้งที่่ 2 หาเหรียญเบากว่า

2.2 ถ้ากองสามเหรียญฝั่งไหนเบากว่า แปลว่าเหรียญปลอมอยู่ฝั่งนั้น หยิบสองเหรียญใดใดในกองเบามาชั่งครั้งที่ 2 เหรียญไหนเบากว่าเหรียญนั้นปลอม ถ้าเท่ากันเหรียญที่เหลือปลอม

ใช้วีธีแบ่ง 3 กลุ่ม: จะใช้จำนวนการชั่งเพียง 2 ครั้ง จะต้องเจอเหรียญที่เบากว่าแน่นอน

ใช้วีธีแยกสองฝั่งแล้วตัดออกทีละครึ่ง: จะใช้จำนวนการชั่ง 3 ครั้ง จะต้องเจอเหรียญที่เบากว่าแน่นอน

ใช้วีธีสุ่มจับคู่ เลือก วนที่ละเหรียญ: จะใช้จำนวนการชั่งไม่เกิน 7 ครั้ง จะต้องเจอเหรียญที่เบากว่าแน่นอน

(กรณีสุ่มจับคู่ โชคดีเจอ : ก็ใช้เพียง 1 ครั้งครับ)

2 ครั้ง

สูตรคือ ceil(log n / log 3)

หลักการคือ วัตถุจะถูกแบ่งเป็น 3 กอง คือ กองบนตาชั่งด้านซ้าย, ด้านขวาและส่วนที่เหลือ

และการชั่ง 2 ครั้งจะใช้กับวัตถุได้มากที่สุด 9 ชิ้นครับ

ผมมีเวอร์ชันยากกว่านั้นมาฝาก มี 12 เหรียญ เหรียญนึงเบา/หนักกว่าเหรียญอื่นๆ ใช้ตาชั่งได้ 3 ครั้ง 555+

ไม่ใช่ครับ ขอโทษที่ไม่กระจ่าง คือใน 12 เหรียญนั้น มี 1 เหรียญที่มันเบากว่าหรือหนักกว่า 11 เหรียญที่เหลือครับ

ใช้ 3 ครั้งครับ แต่ผมจะเขียนลุยแนวทางไปจนถึงครั้งที่2 ส่วนครั้งที่3ให้ลองพิจารณากันต่อกันนะครับ (เพราะว่าการเขียนอธิบายมันจะแตกซับซ้อนจนไม่น่าอ่าน)

My Solution
เนื่องจากตัวปัญหาไม่ทราบว่าหนักหรือเบากว่า จะตั้ง code ย่อดังนี้

- ก: น้ำหนักได้ เกณฑ์มาตรฐาน
- บ: น้ำหนักอยู่ใน กลุ่มเบา กว่าเกณฑ์มาตรฐาน
- น: น้ำหนักอยู่ใน กลุ่มหนัก กว่าเกณฑ์มาตรฐาน
- o: ยังไม่ทราบว่า หนัก/เบา/เกณฑ์

@ชั่งครั้งที่1 (o4 : o4) นอกตาชั่ง o4

-> สมดุล => จะจัดกลุ่มได้ {o4 } { ก8}

         @ชั่งครั้งที่2 (o3 : ก3) นอกตาชั่ง o1  
          ==> สามารถ @ชั่งครั้งที่3 จบได้

-> ไม่สมดุล => จะจัดกลุ่มได้ {บ4, น4 } {ก4}

         @ชั่งครั้งที่2 (บ2+น2 : ก2+บ1+น1) นอกตาชั่ง บ1,น1  
          ==> สามารถ @ชั่งครั้งที่3 จบได้

การเฉลยแบบละเอียดนะครับ เผื่อจะมีประโยชน์กับบางท่านครับ

ขอกำหนด code ย่อ สำหรับการแก้ไขปัญหานี้ดังนี้ครับ

- จ: กลุ่มเหรียญน้ำหนัก จริง
- บ: กลุ่มเหรียญที่อาจมีเหรียญปลอม-เบา อยู่
- น: กลุ่มเหรียญที่อาจมีเหรียญปลอม-หนัก อยู่
- ย: ยังไม่ทราบว่า หนัก/เบา/จริง

@ชั่งครั้งที่1 ชั่ง (4ย กับ 4ย) เหลือไว้นอกตาชั่ง 4ย

-> สมดุล => แสดง 8 เหรียญที่ชั่งเป็นเหรียญจริง หรือสรุปเป็น code สั้นๆ => {4ย} {8จ}

     @ชั่งครั้งที่2  ชั่ง (3ย กับ 3จ) ทิ้งไว้นอกตาชั่ง 1ย  

      -> สมดุล => แสดงว่านอกตาชั่งเป็นเหรียญปลอม  ---> [จบ]

      -> ไม่สมดุล_ด้านซ้ายลอย => แสดงว่า 3ย มีปลอมเบาอยู่ => {3บ} {9จ}

           @ชั่งครั้งที่3  ชั่ง (1บ กับ 1บ) เหลือไว้นอกตาชั่ง 1บ

            -> สมดุล => แสดงว่าที่ไม่ได้ชั่งคือเหรียญปลอม ---> [จบ]

            -> ไม่สมดุล => แสดงว่าฝั่งที่เบากว่าเป็นเหรียญปลอม ---> [จบ]

      -> ไม่สมดุล_ด้านซ้ายต่ำ => แสดงว่า 3ย มีปลอมหนักอยู่ => {3น} {9จ}

           @ชั่งครั้งที่3  ชั่ง (1น กับ 1น) เหลือไว้นอกตาชั่ง 1น

            -> สมดุล => แสดงว่าที่ไม่ได้ชั่งคือเหรียญปลอม  ---> [จบ]

            -> ไม่สมดุล => แสดงว่าฝั่งหนักกว่าเป็นเหรียญปลอม  ---> [จบ]

-> ไม่สมดุล => สามารถสรุปเหรืยญได้เป็น {4บ, 4น } {4จ} ที่ไม่ได้ชั่งเป็นเหรียญจริง

     @ชั่งครั้งที่2  (2บ+2น | 2จ+1บ+1น) ทิ้งไว้นอกตาชั่ง 1บ,1น  

      -> สมดุล => แสดงว่านอกตาชั่งมีเหรียญปลอมอยู่ => {1บ, 1น} 

            @ชั่งครั้งที่3  ชั่ง (1บ กับ 1จ) เหลือไว้นอกตาชั่ง 1น

             -> สมดุล => แสดงว่านอกตาชั่งเป็นเหรียญปลอม ---> [จบ]

             -> ไม่สมดุล => ด้านซ้าย 1บ เป็นเหรียญปลอม  ---> [จบ]

      -> ไม่สมดุล_ซ้ายลอย => มีปลอมใน 2บ-ซ้ายหรือ 1น-ขวา =>{2บ,1น}

            @ชั่งครั้งที่3  ชั่ง (1บ กับ 1บ) เหลือไว้นอกตาชั่ง 1น

             -> สมดุล => แสดงว่านอกตาชั่งเป็นเหรียญปลอม ---> [จบ]

             -> ไม่สมดุล => แสดงว่าฝั่งที่เบากว่าเป็นเหรียญปลอม ---> [จบ]

      -> ไม่สมดุล_ซ้ายต่ำ => มีปลอมใน 2น-ซ้ายหรือ 1บ-ขวา =>{2น,1บ}

            @ชั่งครั้งที่3  ชั่ง (1น กับ 1น) เหลือไว้นอกตาชั่ง 1บ

             -> สมดุล => แสดงว่านอกตาชั่งเป็นเหรียญปลอม ---> [จบ]

             -> ไม่สมดุล => แสดงว่าฝั่งหนักกว่าเป็นเหรียญปลอม ---> [จบ]

.Answer

ก็นะ .. ก็แบบประมาณว่า มีนาเป็น 1000 ไร่ อะคับ .. ก็เลยต้องคิดเลขเยอะหน่อย

ในเมืองไทยก็มีอยู่นะ แถว สุโขทัย

(อันนี้คำตอบ ขำๆ นะครับ)

Thaina Thu, 17/11/2011 - 13:00

1 3 9 27 ?

คิดอยู่นานเลยทีเดียว

LazarusSP1 Thu, 17/11/2011 - 14:21

In reply to by Thaina

ช่ายๆ ผมได้เลขนี้เหมือนกันครับ https://docs.google.com/document/d/1bIl57n0ZxXMOrsxKIkvnBehbpPki0IpzwcqQCiur3DY/edit

ผมพิสูจน์ทางคณิตศาสตร์ให้ดูนะครับ คราวหน้าจะได้ไม่ต้องกระจายตารางให้เมื่อย ;)

สมมติ f(x1,x2,x3,...,xn) เป็นฟังก์ชันจากเลขจำนวนเต็มบวก ไปยังเลขจำนวนเต็มบวก คือฟังก์ชันน้ำหนักของสิ่งของที่สามารถชั่งได้บนตาชั่ง จากก้อนหินน้ำหนัก x1,x2,x3,...xn ที่นำไปวางถ่วงตาชั่ง

และสร้างสมการ w = l - r โดยที่ w คือน้ำหนักของ, l คือน้ำหนักหินด้านซ้าย, r คือน้ำหนักหินด้านขวา

สังเกตที่ f(1) จะได้ว่า

1: w = 1 - 0      คือใส่ก้อนหินด้านซ้าย น้ำหนัก 1 โล

ดังนั้น เราจะได้ว่า f(1) span {1} (คำว่า span คือ f(1) สามารถก่อให้เกิดเหตุการณ์ใดได้บ้าง)

ต่อมาสังเกตที่ f(3) ได้ว่า f(3) span {3} เหตุผลง่ายๆ เหมือน f(1)

ทีนี้ถ้าเราลองหา f(1,3) เล่นๆ เราจะได้ว่า f(1,3) span {1,2,3,4} (ไม่เขียนให้ดูนะครับ)

==========

แต่ถ้าเราใช้วิธีนี้หา f(1,3,9) ด้วย จะค่อนข้างเสียเวลามาก ดังนั้น เราจะสมมติว่า f(1,3) สามารถสาร้างได้จาก f(1) และ f(3) ลองสังเกต

2: w = 3 - 1   เพื่อให้ง่าย เขียน f(3)-f(1)
4: w = 3 + 1           เขียน f(3)+f(1)

จากการสังเกตนี้ เราจะได้ว่า

span f(1,3) = ( f(3)-f(1) ) U ( f(3)+f(1) ) U f(1) U f(3)
            =      {2}      U      {4}      U  {1} U  {3}
            =                   {1,2,3,4}

ตอนนี้ ถ้ามีประสปการณ์พอ จะบอกได้ว่ามันอยู่ในฟอร์มของการอุปนัย (induction) ซึ่งถ้าลองพิสูจน์หากรณีทั่วไปดู เราจะเขียนได้ว่า

span f(x,y) = (f(x)-f(y)) U (f(x)+f(y)) U f(x) U f(y)

==========

ถ้าลองหา f(1,3,9) จะได้ว่า

span f(1,3,9) = ( f(9)-f(1,3) ) U ( f(9)+f(1,3) ) U f(9) U  f(1,3)
              =    {5,6,7,8}    U  {10,11,12,13}  U  {9} U {1,2,3,4}
              =                 {1,2,3,4,...,12,13}

และหา f(1,3,9,27) ได้

span f(27)-f(1,3,9) = {14,15,16,...,26}
span f(27)+f(1,3,9) = {28,29,30,...,40}
ดังนั้น
span f(1,3,9,27) = {1,2,3,...,40}

ซตพ.#

ปล.อันนี้ผมอธิบายอย่างง่ายๆ ซึ่งแบบไม่ถูกตามหลักคณิตศาสตร์ทั้งหมดเท่าไหร่นะครับ แฮะๆ เดี๋ยวจะขวัญกระเจิงไปซะก่อน

เข้าใจว่าที่เขากระจายตารางนั่นแค่พิสูจน์เฉยๆครับ

ตอนแรกผมก็คิดด้วยลำดับเหตุการณ์ว่าคงต้องมีหินหนัก 1

แต่พอคิดว่ามันมีความเป็นไปได้ที่ เราจะมีหินหนัก 8 กับ 9 แล้วเอาไปวางสองฝั่ง ก็ชั่ง 1 ได้เหมือนกัน ผมเลยต้องเปลี่ยนกลับไปคิดจาก 39 38

แต่พอคิดได้แล้ว ก็ต้องมานั่งคิดถึง 1 - 40 เหมือนกัน

tanut Thu, 17/11/2011 - 14:11

นานมาแล้ว ผมก็ยังไม่เข้าใจว่าทำไมโจทย์พวกนี้ถึงเรียกว่าโจทย์ coding/programming เพราะว่ามันก็เป็นโจทย์ธรรมดาๆ...
หรือว่าเราขี้เกียจคิดคำตอบ ก็เลยต้องเขียนโปรแกรมมาวนลูปหาคำตอบที่ถูกต้อง :)

ในกรณีนี้ยังงัยมันก็ไม่มีทางเอาไปประโยชน์จริงๆได้อยู่แล้วครับ .. เป็นเพียงการฝึกแปลงความคิดให้เป็น flow หรือ ชุดคำสั่งทางคอมพิวเตอร์เท่านั้นหละครับ

ในกรณีชัดเจนนั้น คือเรื่อง Matrix ครับซึ่งหลายคนคงทราบอยู่แล้วว่า, ปกติการแก้สมการหลายตัวแปร เราก็แก้ด้วยมือก็ได้ครับ แต่ว่าถ้าจะแก้สมการตัวแปรเยอะๆ เราก็สามารถให้คอมพ์มันทำงานให้โดยอาศัย algorithm ของ Matrix โดยทำ operation กันแบบ Matrix มันก็จะ Generic ยืดหยุ่นรองรับการแก้ปัญหาหลายๆ ตัวแปรได้ครับ

ข้อดีของการดูโจทย์แบบนี้เพื่อหาเราสามารถเปลงโจทย์เดิม [A] ไปเป็นอีกโจทย์ที่ equivalent [B] กันได้
ถ้าเกิดเรามี solution ของปัญหา [B] เราก็เอาไปใช้กับ [A] ได้ นอกจากจะไม่ต้องคิดให้เหนื่อยแล้วประสิทธิภาพในการได้มาซึ่งคำตอบก็น่าจะดีที่สุดด้วย

ยกตัวอย่างแล้วกันคุณว่าปัญหา [B] Travelling saleman คุณรู้มั้ยมันเอามาใช้ทำอะไรบ้าง (มีอะไรที่เป็นปัญหา [A] จะแก้โดยใช้ Travelling saleman ได้)

ใช่ครับมันเป็นโจทย์เชาว์ธรรมดาๆ ที่ผมเล่นตั้งแต่เด็กๆ เลย(แน่นอนตอนนั้นไม่มีความรู้ทางโปรแกรมมิ่ง) แต่ผมเชื่อลึกๆ ว่าเด็กที่มี logic ดี เล่นเกมพวกนี้ได้ จะสามารถเขียนโปรแกรมที่ดีได้

อย่างงี้ต้องขอเชิญท่าน neizod เข้าสู่โจทย์ชาวนา ข้อถัดไปเลยครับ .. คือ comment กำลังว่างอยู่เลยครับช่วยจัดให้หน่อย