ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming[ปัญหาเชิงโปรแกรมมิ่ง] ใครว่าง ๆ ลองมาขบคิดเล่น ๆ กันครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [ปัญหาเชิงโปรแกรมมิ่ง] ใครว่าง ๆ ลองมาขบคิดเล่น ๆ กันครับ  (อ่าน 1657 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
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 สมาชิกหรือวิธีอื่น ๆ ใช่ครับ ถ้าเรามองด้วยตาเปล่าก็ไม่ใช่เรื่องยาก แต่ผมก็นั่งคิดถึงพื้นฐานการแก้ปัญหาว่า ถ้าเป็นคอมพิวเตอร์หรือในทางโปรแกรมมิ่ง คอนเซปหรือแนวทางในการจะแก้ปัญหาจะแก้ได้อย่างไร ผมนั่งคิดมาเป็นวันแล้วเริ่มตัน ๆ เลยอยากให้เพื่อน ๆ ทุกท่าน เผื่อมีไอเดียดี ๆ แบ่งปันกันน่ะครับ แฮ่  Tongue
///////////////////
พอจะหาวิธีแก้ได้แล้วนะครับ ขอบคุณทุกท่านครับ  wanwan017
« แก้ไขครั้งสุดท้าย: 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 »

อ่า  Tongue เป็นการเลือกสมาชิกตัวเลขออกจาก ชุดตัวเลขให้ได้มากที่สุดโดยเรียงจากน้อยไปมากน่ะครับ
บันทึกการเข้า

tdelphi
Global Moderator
หัวหน้าแก๊งเสียว
*****

พลังน้ำใจ: 308
ออฟไลน์ ออฟไลน์

กระทู้: 1,601



ดูรายละเอียด เว็บไซต์
« ตอบ #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 ก็ไม่ต้องนับ กระโดดข้ามเอา  wanwan004
บันทึกการเข้า

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 ตัว

แบบนี้พอได้ป่าวคับ  wanwan011
บันทึกการเข้า


ค่าคอมสูงสุด 250 บ./Order เหมาะกับเว็บทุกประเภท มี banner หลายขนาดให้เลือก -- ยินดี support สมาชิก ThaiSeo ทุกท่านครับ

ประกันภัยรถยนต์ วิริยะประกันภัย กรุงเทพประกันภัย
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 ตัว

แบบนี้พอได้ป่าวคับ  wanwan011
อ่าขออภัยที่เขียนปัญหาไม่ครอบคลุมนะครับ คือจริง ๆ ชุดตัวเลขจะเป็นเลขใด ๆ n จำนวนน่ะครับ  Lips Sealed
บันทึกการเข้า

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 คะแนน



 wanwan017
บันทึกการเข้า

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 ข้างบนนะครับ

พอดีผมพอจะหาวิธีแก้ได้แล้วน่ะครับ แฮ่ ยังไงขอบคุณทุกท่านที่เข้ามาแชร์ไอเดียแชร์ความคิดนะครับ ขอบคุณครับ wanwan017

« แก้ไขครั้งสุดท้าย: 19 กุมภาพันธ์ 2013, 11:47:00 โดย idscene » บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์