สวัสดีครับ ผมแชมป์ครับยินดีที่ได้รู้จักครับ เพิ่งสมัครครับ พอดีอยากรบกวนพี่พี่ น้องน้อง ในนี้ช่วยแก้ปัญหาให้หน่อยครับ
พอดี ผมทำ project เกี่ยวกับ programming ครับ แล้วต้องเขียน paper จึงมีเรื่องมาขอความช่วยเหลือครับ
โจทย์ คือ มีตัวเลข set หนึ่งเช่น (19,4,16,4,21) เลขนี้จะเป็น input จาก user ครับ กี่จำนวนก็ได้ แล้ว ซ้ำได้
แล้วหารูปแบบทั้งหมดที่บวกกันแล้วไม่เกินตัวเลขมากสุดในตัวอย่างคือ 21
ตัวอย่างผลลัพธ์
1. 19 < 21 จะได้ (19)
2. 4+4 < 21 จะได้ (4,4)
3. 4+16 < 21 จะได้ (4,16)
คำตอบก็คือ มี 3 sets ตามด้านบนแล้วโชว์ set ผลลัพธ์
ผมเขียนโปรแกรมเสร็จแล้วครับ แต่ปัญหาคือ
1. อยากให้ช่วยเช็คหน่อยครับว่าผลลัพธ์ออกมาครบหมด (ตอนนี้ผมเช็คเองเหมือนจะครบหมดครับ แต่ยังไม่แน่ใจว่ามีกรณีที่ไม่ครอบคลุมหรือไม่)
2.ถ้าวิธีนี้ใช้ได้ ผมอยากรู้ว่าวิธีประมาณนี้เรียกว่า อะไร ในเรื่องความน่าจะเป็นครับ ผมอยากอ่านเพิ่มเติมเพื่อไปเขียน paper ครับ
3. แล้ววิธีนี้เขียนเป็น สมการได้ไหมครับ
4.มีวิธีอื่นในการหาอีกไหมครับ แนะนำได้นะครับ ผมคิดออกวิธีเดียวครับ
วิธีที่ผมทำคือ
1.หาตัวที่มากที่สุดออกมา (21)
2.เรียงข้อมูลใหม่ใน set ที่เหลือ (4,4,16,19)
3.บวกไปเรื่อยเรื่อยจากตัวแรกครับ 4+4+skip +skip แต่ถ้าเกิน 21 ให้ข้ามแล้วบวกตัวถัดไปจนหมดครับ
4.จะได้ (4,4) เพราะบวกต่อจะเกิน
5.แล้ววนลูปเพื่อสลับตำแหน่งครับจะได้set (4,16,19,4) แล้วทำขอสามซ้ำครับ 4+16+19+....
6.จะได้ (4,16)
7.วนแบบนี้ไปเรื่อยเรื่อยครับ จนทำให้ทุกตัวเป็นตัวเริ่มต้นของ set ครับ
8ฃ. set (16,19,4,4) ก็จะได้ 16+ skip + 4 + skip (16,4)
9. set (19,4,4,16) ก็จะได้ 19 + skip + skip + skip (19)
10. เรียงข้อมูลใน set เอาเฉพาะ set ที่ไม่ซ้ำครับ (4,4),(4,16),(16,4),(19)
11. ก็จะได้คำตอบ เป็น 3 sets : (4,4),(4,16),(19)
ขอบคุณล่วงหน้านะครับ ผมไม่ค่อยเก่งเลข