idscene
ก๊วนเสียว
พลังน้ำใจ: 21
ออฟไลน์
กระทู้: 213
|
 |
« เมื่อ: 16 กุมภาพันธ์ 2013, 22:01:56 » |
|
สมมุติเรามีชุดเลข 1 5 2 6 3 7 4 (ทั้งนี้ชุดตัวเลขเป็นแค่ตัวอย่างนึงน่ะครับ จริง ๆ จะเป็นเลขใด ๆก็ได้ที่ไม่ซ้ำกันและจะเรียงหรือไม่เรียงเข้ามาก็ได้น่ะครับ)ถ้าเราต้องการที่จะเลือกตัวเลข โดยหาจำนวนตัวสมาชิกที่ดึงออกมา ให้ได้มากที่สุด โดยเมื่อดึงออกมามีข้อแม้ว่าเลขต้องเรียงกันจากน้อยไปมากตามลำดับ อย่างคำตอบนี้ถ้าเรามองด้วยตาเปล่าก็จะสามารถบอกได้ว่า คำตอบคือ 4 จำนวน ก็คือ 1 2 3 4 ก็คือ [1] 5 [2] 6 [3] 7 [4] ซึ่งเราจะไม่เลือก 5 6 7 จาก 1 [5] 2 [6] 3 [7] 4 ซึ่งให้คำตอบเป็น 3 สมาชิกหรือวิธีอื่น ๆ ใช่ครับ ถ้าเรามองด้วยตาเปล่าก็ไม่ใช่เรื่องยาก แต่ผมก็นั่งคิดถึงพื้นฐานการแก้ปัญหาว่า ถ้าเป็นคอมพิวเตอร์หรือในทางโปรแกรมมิ่ง คอนเซปหรือแนวทางในการจะแก้ปัญหาจะแก้ได้อย่างไร ผมนั่งคิดมาเป็นวันแล้วเริ่มตัน ๆ เลยอยากให้เพื่อน ๆ ทุกท่าน เผื่อมีไอเดียดี ๆ แบ่งปันกันน่ะครับ แฮ่  /////////////////// พอจะหาวิธีแก้ได้แล้วนะครับ ขอบคุณทุกท่านครับ 
|
|
« แก้ไขครั้งสุดท้าย: 19 กุมภาพันธ์ 2013, 11:42:42 โดย idscene »
|
บันทึกการเข้า
|
|
|
|
afterdead
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 156
ออฟไลน์
กระทู้: 2,833
|
 |
« ตอบ #1 เมื่อ: 16 กุมภาพันธ์ 2013, 22:09:56 » |
|
ยังไม่เข้าใจโจทย์ !!!!
|
|
|
บันทึกการเข้า
|
|
|
|
idscene
ก๊วนเสียว
พลังน้ำใจ: 21
ออฟไลน์
กระทู้: 213
|
 |
« ตอบ #2 เมื่อ: 16 กุมภาพันธ์ 2013, 22:26:15 » |
|
อ่า  เป็นการเลือกสมาชิกตัวเลขออกจาก ชุดตัวเลขให้ได้มากที่สุดโดยเรียงจากน้อยไปมากน่ะครับ
|
|
|
บันทึกการเข้า
|
|
|
|
tdelphi
|
 |
« ตอบ #3 เมื่อ: 16 กุมภาพันธ์ 2013, 22:27:18 » |
|
Sort ก่อนแล้วดึงไม่ได้เหรอ
|
|
|
บันทึกการเข้า
|
|
|
|
idscene
ก๊วนเสียว
พลังน้ำใจ: 21
ออฟไลน์
กระทู้: 213
|
 |
« ตอบ #4 เมื่อ: 16 กุมภาพันธ์ 2013, 22:33:44 » |
|
Sort ก่อนแล้วดึงไม่ได้เหรอ
อ่า คือจะแก้ปัญหาจากชุด input ที่รับเข้ามาเลยอะครับว่าจะได้จำนวนเท่าใดน่ะครับ
|
|
|
บันทึกการเข้า
|
|
|
|
nuttdam
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 124
ออฟไลน์
กระทู้: 1,826
|
 |
« ตอบ #5 เมื่อ: 16 กุมภาพันธ์ 2013, 22:35:00 » |
|
สมมติมี 1 5 2 6 3 7 4
ก็ดึง 1 มาแล้วไล่ 5 2 6 3 7 4 ได้ 2 อีกตัว เป็น 1 2 แล้วไล่ 6 3 7 4 ต่อ ก็ได้ 3 ดึงออกมา เป็น 1 2 3 แล้วไล่ 7 4 ต่อ ดึง 4 ออกมา ก็ได้ 1 2 3 4 แล้วเช็คเลขที่เหลือว่าเรียงหรือเปล่า? ก็ได้เป็น 5 6 7
ผมเข้าใจโจทย์หรือเปล่าครับ?
|
|
|
บันทึกการเข้า
|
|
|
|
afterdead
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 156
ออฟไลน์
กระทู้: 2,833
|
 |
« ตอบ #6 เมื่อ: 16 กุมภาพันธ์ 2013, 22:36:54 » |
|
รับค่าเป็น string นับจำนวน ตัวอักษร แล้วเทียบ เอา
|
|
|
บันทึกการเข้า
|
|
|
|
greenhead
ก๊วนเสียว
พลังน้ำใจ: 102
ออฟไลน์
กระทู้: 414
|
 |
« ตอบ #7 เมื่อ: 16 กุมภาพันธ์ 2013, 22:39:25 » |
|
น้อยไปมากที่ว่า .. เพิ่มที่ละ 1 หรือเปล่าครับ เช่น 1 2 3 4 งั้นตัวที่ไม่เพิ่มทีละ 1 ก็ไม่ต้องนับ กระโดดข้ามเอา 
|
|
|
บันทึกการเข้า
|
|
|
|
NightClub
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 297
ออฟไลน์
กระทู้: 2,461
|
 |
« ตอบ #8 เมื่อ: 16 กุมภาพันธ์ 2013, 22:39:54 » |
|
ใช้การวนทีละลูป
ถ้าเรียง
1 5 2 6 3 7 4
เริ่ม จาก 1 แทน x
ค่าต่อไป = x+1
ใช้ array ให้เจอ 2
พอ เจอ 2 แล้ว ให้ตัด อะเรย์ ที่ผ่านมาทิ้ง แล้ว วนใหม่ ซึ่ง การวนครั้งต่อไป จะเหลือ 6 3 7 4
แล้วก็เข้าสูตร x+1 อีก ถ้าเริ่มที่ 1 เราจะได้ 4 คะแนน
แล้วก็มาเริ่มที่ ลูปตัว ต่อไป คือ 5
พอวนแล้ว เราก็จะได้ 3 คะแนน
ทีนี้ เราก็มาเช็คว่า การวนเริม่จากตัวไหนคะแนนสูงสุด
สมมุติ
1 8 9 3 6 4 2
จะได้
1 มี 2 คะแนน 8 มี 1 คะแนน 9 ไม่มี 0 คะแนน 3 มี 1 คะแนน 6 ไม่มีคะแนน 4 ไม่มีคะแนน 2 ไม่มีคะแนน
คำตอบจะได้ 1 ซึ่งมี 2 คะแนน
|
|
|
บันทึกการเข้า
|
รับจ้างเขียนโปรแกรม PHP งานมืออาชีพ เสร็จตามที่กำหนด ราคาปานกลาง เหมาะกับผู้ที่รับงานมาแล้วส่งต่อจ๊ะ PM มาเลย
|
|
|
idscene
ก๊วนเสียว
พลังน้ำใจ: 21
ออฟไลน์
กระทู้: 213
|
 |
« ตอบ #9 เมื่อ: 16 กุมภาพันธ์ 2013, 22:40:17 » |
|
สมมติมี 1 5 2 6 3 7 4
ก็ดึง 1 มาแล้วไล่ 5 2 6 3 7 4 ได้ 2 อีกตัว เป็น 1 2 แล้วไล่ 6 3 7 4 ต่อ ก็ได้ 3 ดึงออกมา เป็น 1 2 3 แล้วไล่ 7 4 ต่อ ดึง 4 ออกมา ก็ได้ 1 2 3 4 แล้วเช็คเลขที่เหลือว่าเรียงหรือเปล่า? ก็ได้เป็น 5 6 7
ผมเข้าใจโจทย์หรือเปล่าครับ?
ครับ ประมาณนี้ครับ คำตอบในทีนี้ก็คือ 4 จำนวนได้แก่ 1 2 3 4 ที่ดึงมากจาก สมาชิก 1 5 2 6 3 7 4 น่ะครับ ซึ่งเป็นจำนวนสมาชิกที่มากที่สุดที่จะดึงออกมาจากโจทย์ชุดนี้ได้น่ะครับ
|
|
|
บันทึกการเข้า
|
|
|
|
pkr4life
คนรักเสียว
พลังน้ำใจ: 17
ออฟไลน์
กระทู้: 140
|
 |
« ตอบ #10 เมื่อ: 16 กุมภาพันธ์ 2013, 22:40:58 » |
|
จากตัวอย่าง 1 5 2 6 3 7 4 เขียน loopสร้าง 7 กรณี กรณี 1 เริ่มด้วย 1: คำตอบ 1 2 3 4 กรณี 2 เริ่มด้วย 5: คำตอบ 5 6 7 กรณี 3 เริ่มด้วย 2: คำตอบ 2 3 4 ... กรณี 7 เริ่มด้วย 4: คำตอบ 4 สุดท้าย สรุปคำตอบ กรณี 1 ได้สมาชิกเยอะสุด 4 ตัว แบบนี้พอได้ป่าวคับ 
|
|
|
บันทึกการเข้า
|
|
|
|
idscene
ก๊วนเสียว
พลังน้ำใจ: 21
ออฟไลน์
กระทู้: 213
|
 |
« ตอบ #11 เมื่อ: 16 กุมภาพันธ์ 2013, 22:47:18 » |
|
จากตัวอย่าง 1 5 2 6 3 7 4 เขียน loopสร้าง 7 กรณี กรณี 1 เริ่มด้วย 1: คำตอบ 1 2 3 4 กรณี 2 เริ่มด้วย 5: คำตอบ 5 6 7 กรณี 3 เริ่มด้วย 2: คำตอบ 2 3 4 ... กรณี 7 เริ่มด้วย 4: คำตอบ 4 สุดท้าย สรุปคำตอบ กรณี 1 ได้สมาชิกเยอะสุด 4 ตัว แบบนี้พอได้ป่าวคับ  อ่าขออภัยที่เขียนปัญหาไม่ครอบคลุมนะครับ คือจริง ๆ ชุดตัวเลขจะเป็นเลขใด ๆ n จำนวนน่ะครับ 
|
|
|
บันทึกการเข้า
|
|
|
|
idscene
ก๊วนเสียว
พลังน้ำใจ: 21
ออฟไลน์
กระทู้: 213
|
 |
« ตอบ #12 เมื่อ: 16 กุมภาพันธ์ 2013, 22:48:47 » |
|
ใช้การวนทีละลูป
ถ้าเรียง
1 5 2 6 3 7 4
เริ่ม จาก 1 แทน x
ค่าต่อไป = x+1
ใช้ array ให้เจอ 2
พอ เจอ 2 แล้ว ให้ตัด อะเรย์ ที่ผ่านมาทิ้ง แล้ว วนใหม่ ซึ่ง การวนครั้งต่อไป จะเหลือ 6 3 7 4
แล้วก็เข้าสูตร x+1 อีก ถ้าเริ่มที่ 1 เราจะได้ 4 คะแนน
แล้วก็มาเริ่มที่ ลูปตัว ต่อไป คือ 5
พอวนแล้ว เราก็จะได้ 3 คะแนน
ทีนี้ เราก็มาเช็คว่า การวนเริม่จากตัวไหนคะแนนสูงสุด
สมมุติ
1 8 9 3 6 4 2
จะได้
1 มี 2 คะแนน 8 มี 1 คะแนน 9 ไม่มี 0 คะแนน 3 มี 1 คะแนน 6 ไม่มีคะแนน 4 ไม่มีคะแนน 2 ไม่มีคะแนน
คำตอบจะได้ 1 ซึ่งมี 2 คะแนน

|
|
|
บันทึกการเข้า
|
|
|
|
nuttdam
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 124
ออฟไลน์
กระทู้: 1,826
|
 |
« ตอบ #13 เมื่อ: 16 กุมภาพันธ์ 2013, 22:49:54 » |
|
สมมติมี 1 5 2 6 3 7 4
ก็ดึง 1 มาแล้วไล่ 5 2 6 3 7 4 ได้ 2 อีกตัว เป็น 1 2 แล้วไล่ 6 3 7 4 ต่อ ก็ได้ 3 ดึงออกมา เป็น 1 2 3 แล้วไล่ 7 4 ต่อ ดึง 4 ออกมา ก็ได้ 1 2 3 4 แล้วเช็คเลขที่เหลือว่าเรียงหรือเปล่า? ก็ได้เป็น 5 6 7
ผมเข้าใจโจทย์หรือเปล่าครับ?
ครับ ประมาณนี้ครับ คำตอบในทีนี้ก็คือ 4 จำนวนได้แก่ 1 2 3 4 ที่ดึงมากจาก สมาชิก 1 5 2 6 3 7 4 น่ะครับ ซึ่งเป็นจำนวนสมาชิกที่มากที่สุดที่จะดึงออกมาจากโจทย์ชุดนี้ได้น่ะครับ ก็พอดึง 1 2 3 4 ออกมาได้จาก 1 5 2 6 3 7 4 แล้วก็ดึง 1 2 3 4 ออกจาก 1 5 2 6 3 7 4 แล้วเอา 5 6 7 มาวน loop อีกรอบสิครับ?
|
|
|
บันทึกการเข้า
|
|
|
|
oDarkIceo
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 276
ออฟไลน์
กระทู้: 1,059
|
 |
« ตอบ #14 เมื่อ: 16 กุมภาพันธ์ 2013, 22:53:03 » |
|
เน้นวน loop ตามที่ท่านๆ ข้างบนบอก ไม่ยากหรอกครับ
|
|
|
บันทึกการเข้า
|
|
|
|
idscene
ก๊วนเสียว
พลังน้ำใจ: 21
ออฟไลน์
กระทู้: 213
|
 |
« ตอบ #15 เมื่อ: 16 กุมภาพันธ์ 2013, 22:59:21 » |
|
สมมติมี 1 5 2 6 3 7 4
ก็ดึง 1 มาแล้วไล่ 5 2 6 3 7 4 ได้ 2 อีกตัว เป็น 1 2 แล้วไล่ 6 3 7 4 ต่อ ก็ได้ 3 ดึงออกมา เป็น 1 2 3 แล้วไล่ 7 4 ต่อ ดึง 4 ออกมา ก็ได้ 1 2 3 4 แล้วเช็คเลขที่เหลือว่าเรียงหรือเปล่า? ก็ได้เป็น 5 6 7
ผมเข้าใจโจทย์หรือเปล่าครับ?
ครับ ประมาณนี้ครับ คำตอบในทีนี้ก็คือ 4 จำนวนได้แก่ 1 2 3 4 ที่ดึงมากจาก สมาชิก 1 5 2 6 3 7 4 น่ะครับ ซึ่งเป็นจำนวนสมาชิกที่มากที่สุดที่จะดึงออกมาจากโจทย์ชุดนี้ได้น่ะครับ ก็พอดึง 1 2 3 4 ออกมาได้จาก 1 5 2 6 3 7 4 แล้วก็ดึง 1 2 3 4 ออกจาก 1 5 2 6 3 7 4 แล้วเอา 5 6 7 มาวน loop อีกรอบสิครับ? อ่อ ขอบคุณน่ะครับ เดี๋ยวลองไปเขียนดูอีกทีครับ
|
|
|
บันทึกการเข้า
|
|
|
|
NightClub
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 297
ออฟไลน์
กระทู้: 2,461
|
 |
« ตอบ #16 เมื่อ: 16 กุมภาพันธ์ 2013, 23:26:03 » |
|
ว่างจัด <? $number = array(4,8,9,3,5,7,6); $fixnum = $number; foreach(array_keys($number) as $x){ $nextnumber = $number[$x]+1; foreach($number as $capture){
if($capture == $nextnumber){ $point[$x] = $point[$x]+1; $nextnumber = $nextnumber+1;
} }
unset($number[$x]); }
$maxpoint = max($point); $hightpointkey = array_search($maxpoint,$point);
echo "Max point : $maxpoint ($fixnum[$hightpointkey] ";
for($i=0;$i<$maxpoint;$i++){ $fixnum[$hightpointkey] = $fixnum[$hightpointkey]+1; $text .= "> $fixnum[$hightpointkey] "; } echo "$text )"; ?>
|
|
|
บันทึกการเข้า
|
รับจ้างเขียนโปรแกรม PHP งานมืออาชีพ เสร็จตามที่กำหนด ราคาปานกลาง เหมาะกับผู้ที่รับงานมาแล้วส่งต่อจ๊ะ PM มาเลย
|
|
|
Maxio
ก๊วนเสียว
พลังน้ำใจ: 49
ออฟไลน์
กระทู้: 275
|
 |
« ตอบ #17 เมื่อ: 16 กุมภาพันธ์ 2013, 23:48:19 » |
|
ข้างบน php กระชับดีครับ ผมไม่ค่อยเก่ง php ได้ศึกษาโค๊ดด้วย ขอบคุณครับ เมื่อกี้ลองเทสละ ตัว maxpoint ลืมนับตัวเองหรือเปล่าครับ เช่น 4 5 6 นับได้ 2 อันนี้ จาวาครับ โค๊ดแบบกากๆครับ แบบลูกทุ่งๆ ยาวไปนิด package test;
import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class TestQuiz {
public static void main(String[] args) { //data for test int[] data = {1, 5, 2, 6, 3, 7, 4, 8, 9}; List<ArrayList> listOfNumber = new ArrayList<ArrayList>(0); for (int mainLoop = 0; mainLoop < data.length; mainLoop++) { loop: for (int i = mainLoop; i < data.length; i++) { ArrayList<Integer> temp = new ArrayList<Integer>(0); ArrayList<Integer> result = new ArrayList<Integer>(0); for(int j = i+1; j < data.length; j++) { System.out.println("Compare data :" + data[i] + " vs " + data[j]);
if (data[i] - data[j] == -1) { temp.add(data[i]); temp.add(data[j]); for (Integer num : temp) { if (!result.contains(num)) { result.add(num); } } i = j; } if(j == data.length - 1) { listOfNumber.add(result); break loop; } } } } ArrayList<Integer> group = new ArrayList<Integer>(0); //เลือกตัวเลขที่ที่เรียงกันที่มีจำนวนมากที่สุด int maxGroup = 0; for (int i = 0; i < listOfNumber.size(); i++) { group.add(listOfNumber.get(i).size()); maxGroup = Collections.max(group); } for (int i =0; i < listOfNumber.size();i ++) { if(listOfNumber.get(i).size() == maxGroup) { System.out.println("Found " + listOfNumber.get(i).size() + " items" + " : " + listOfNumber.get(i)); } } }
}
|
|
« แก้ไขครั้งสุดท้าย: 16 กุมภาพันธ์ 2013, 23:54:02 โดย Maxio »
|
บันทึกการเข้า
|
|
|
|
idscene
ก๊วนเสียว
พลังน้ำใจ: 21
ออฟไลน์
กระทู้: 213
|
 |
« ตอบ #18 เมื่อ: 19 กุมภาพันธ์ 2013, 11:33:10 » |
|
ขอบคุณทั้งสองท่าน Maxio, NightClub ข้างบนนะครับ พอดีผมพอจะหาวิธีแก้ได้แล้วน่ะครับ แฮ่ ยังไงขอบคุณทุกท่านที่เข้ามาแชร์ไอเดียแชร์ความคิดนะครับ ขอบคุณครับ 
|
|
« แก้ไขครั้งสุดท้าย: 19 กุมภาพันธ์ 2013, 11:47:00 โดย idscene »
|
บันทึกการเข้า
|
|
|
|
|