หัวข้อ: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: hurahura ที่ 07 มีนาคม 2012, 18:24:01 ต้องการสุ่มตัวเลขออกมา 5 ตัว แต่ละตัวมีค่าไม่เกิน 200 และทุกตัวรวมกันมีค่า 500 พอดี โดยเลขทั้ง 5 ตัวมีโอกาสเท่ากันที่จะได้ค่ามากหรือน้อย เช่น
str : 200 vit : 100 agi : 50 int : 100 lux : 50 str : 10 vit : 120 agi : 200 int : 180 lux : 90 str : 160 vit : 0 agi : 70 int : 170 lux : 100 จากตัวอย่าง แต่ละชุดเอาเลขมารวมกันได้ 500 พอดี แต่ละตัวไม่เกิน 200 และไม่ต่ำกว่า 0 เขียนแบบไหนถึงจะดีที่สุดครับ ขอบคุณครับ หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: seoโออิชิ ที่ 07 มีนาคม 2012, 18:48:57 เหมือนเล่นเกมส์สนุก ๆ เลย ตอบแบบสนุกนะครับผมก็ไม่รู้มาก เรื่องการเขียนแล้วเช็คว่าค่าเกิน 500 รึยังอันนี้คงไม่จำเป็นต้องพูด
เลขที่สุ่มออกมาแต่ล๊ะรอบนั้น ลบจาก 500 เหลือเท่าไหร่หารด้วยจำนวนครั้งที่เหลือ หากเกิน 200 สุ่มใหม่ เช่นครั้งแรกสุ่มได้ 10 ก็นำ 490 หารด้วย 4 (จำนวนครั้ง)ที่เหลือ ได้ 122.5 ถือว่าผ่านสุ่มตัวที่ 2 ต่อเลย ตัวที่ 2 สมมุติได้ 20 ก็ได้ 470 หาร 3 (จำนวนครั้งที่เหลือ) ได้ 156 ถือว่าผ่านสุ่มต่อตัวที่ 3 ตัวที่ 3 เจ้ากรรมได้ 30 ทีนี้จะเป็น 440 หารด้วย 2 ทีนี้หละเกิน200แล้ว ให้สุ่มตัวที่ 3 มาใหม่ ตัวที่5 สุดท้ายคงไม่ต้องสุ่มใช้ลบที่เหลือเอาเลย หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: mukemgiz ที่ 07 มีนาคม 2012, 19:01:22 ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น str ไปโลด :wanwan004: :wanwan004: :wanwan004:
หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: seoโออิชิ ที่ 07 มีนาคม 2012, 19:32:43 ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น str ไปโลด :wanwan004: :wanwan004: :wanwan004: เล่นซ๊ะงงเลย นั่งนึกตั้งนาน :wanwan024:หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: Extra Cash ที่ 07 มีนาคม 2012, 20:07:16 สุ่มมาแค่ 4 ตัวพอครับ
ตัวที่ 5 เอาผลรวมของ 4 ตัวแรกไปลบ 500 หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: oDarkIceo ที่ 07 มีนาคม 2012, 20:08:52 ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น str ไปโลด :wanwan004: :wanwan004: :wanwan004: เล่นซ๊ะงงเลย นั่งนึกตั้งนาน :wanwan024:55555 เลย หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: 077023 ที่ 07 มีนาคม 2012, 20:30:13 dex หายอ่ะ :-[ :-[ :-[
หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: Haniba55 ที่ 07 มีนาคม 2012, 21:38:41 สุ่มมาแค่ 4 ตัวพอครับ ตัวที่ 5 เอาผลรวมของ 4 ตัวแรกไปลบ 500 ถ้าแบบนี้ ก็ไม่ได้บางกรณีนะครับ เช่น สี่ตัวแรกมันสุ่ม 1 1 1 1 (หรือเลขหลักน้อยๆ) ตัวที่ห้า ที่เอามาลบ ห้าร้อย จะได้เกินสองร้อยแน่นอนครับ ในความคิดเห็นของผมคิดว่า A1=ตัวเลขที่1 , A2=ตัวเลขที่2 , A3=ตัวเลขที่3 , A4=ตัวเลขที่4 , A5=ตัวเลขที่ 5 A1=สุ่มค่าระหว่าง 0 ถึง 200 A2=สุ่มค่าระหว่าง 0 ถึง 200 B1= 500-(A1+A2) //ค่าที่จะได้อยู่ระหว่าง 100 - 500 ถ้า B1 >= 400 ถ้าใช่ A3 = สุ่มค่าระหว่าง 198 ถึง 200 A4 = สุ่มค่าระหว่าง 198 ถึง 199 A5 = 500 - (A1+A2+A3+A4) ถ้า B1 มีค่าระห่าง 300 ถึง 399 ถ้าใช่ A3 = สุ่มค่าระหว่าง 198 ถึง 200 A4 = สุ่มค่าระหว่าง 98 ถึง 99 A5 = 500 - (A1+A2+A3+A4) ถ้า B1 มีค่าระห่าง 200 ถึง 299 ถ้าใช่ A3 = สุ่มค่าระหว่าง 98 ถึง 100 A4 = สุ่มค่าระหว่าง 98 ถึง 99 A5 = 500 - (A1+A2+A3+A4) ถ้า B1 มีค่าระห่าง 100 ถึง 199 ถ้าใช่ A3 = สุ่มค่าระหว่าง 99 ถึง 100 A4 = สุ่มค่าระหว่าง 0 ถึง 98 A5 = 500 - (A1+A2+A3+A4) ค่าที่ได้ออกมา อาจจะมีรูปแบบที่ไม่เยอะมากนะครับ แต่ก็ยังถือว่าพอใช้ได้ 555 หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: hurahura ที่ 07 มีนาคม 2012, 22:17:16 ตอนนี้วิธีของคุณ seoโออิชิ ดีที่สุด ผมลองทำดูแล้ว แต่ต้องเพิ่มนู่นนี่อีกนิด
ขอบคุณ Haniba55 ก็น่าจะโอเค ผมยังไม่ได้ลองทำนะ แต่คิดว่า มันอาจจะไม่ค่อยเท่าเทียมกันแต่ละตัวหรือเปล่า ตามโจทย์คือ "โดยเลขทั้ง 5 ตัวมีโอกาสเท่ากันที่จะได้ค่ามากหรือน้อย" ยังรอแนวคิดของท่านอื่นๆอยู่นะครับ หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: seoโออิชิ ที่ 07 มีนาคม 2012, 22:18:41 สุ่มมาแค่ 4 ตัวพอครับ ตัวที่ 5 เอาผลรวมของ 4 ตัวแรกไปลบ 500 ถ้าแบบนี้ ก็ไม่ได้บางกรณีนะครับ เช่น สี่ตัวแรกมันสุ่ม 1 1 1 1 (หรือเลขหลักน้อยๆ) ตัวที่ห้า ที่เอามาลบ ห้าร้อย จะได้เกินสองร้อยแน่นอนครับ ในความคิดเห็นของผมคิดว่า A1=ตัวเลขที่1 , A2=ตัวเลขที่2 , A3=ตัวเลขที่3 , A4=ตัวเลขที่4 , A5=ตัวเลขที่ 5 A1=สุ่มค่าระหว่าง 0 ถึง 200 A2=สุ่มค่าระหว่าง 0 ถึง 200 B1= 500-(A1+A2) //ค่าที่จะได้อยู่ระหว่าง 100 - 500 ถ้า B1 >= 400 ถ้าใช่ A3 = สุ่มค่าระหว่าง 198 ถึง 200 A4 = สุ่มค่าระหว่าง 198 ถึง 199 A5 = 500 - (A1+A2+A3+A4) ถ้า B1 มีค่าระห่าง 300 ถึง 399 ถ้าใช่ A3 = สุ่มค่าระหว่าง 198 ถึง 200 A4 = สุ่มค่าระหว่าง 98 ถึง 99 A5 = 500 - (A1+A2+A3+A4) ถ้า B1 มีค่าระห่าง 200 ถึง 299 ถ้าใช่ A3 = สุ่มค่าระหว่าง 98 ถึง 100 A4 = สุ่มค่าระหว่าง 98 ถึง 99 A5 = 500 - (A1+A2+A3+A4) ถ้า B1 มีค่าระห่าง 100 ถึง 199 ถ้าใช่ A3 = สุ่มค่าระหว่าง 99 ถึง 100 A4 = สุ่มค่าระหว่าง 0 ถึง 98 A5 = 500 - (A1+A2+A3+A4) ค่าที่ได้ออกมา อาจจะมีรูปแบบที่ไม่เยอะมากนะครับ แต่ก็ยังถือว่าพอใช้ได้ 555 หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: hurahura ที่ 07 มีนาคม 2012, 22:23:07 เอ... มันเร็วกว่าจริงๆเหรอครับ
เดี๋ยวต้องลองไปเทียบดู หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: dreamer ที่ 07 มีนาคม 2012, 22:34:45 ผมลองเขียน code เป็นภาษา php
ลองรันหลายรอบก็ถูกนะครับ วิธีการก็ตาม code เลยครับ ---- แก้ไข : เพิ่งย้อนกลับไปอ่าน วิธีการของผมคล้ายกับของคุณ Haniba55 แต่ทำให้เป็น general กว่าครับ ---------------------- โค๊ด: <?php หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: Splendith ที่ 08 มีนาคม 2012, 01:26:37 ขอลองเสนอวิธีผมมั่งครับ โดยการคำนวณช่วงที่สามารถสุ่มได้ก่อน แล้วจึงค่อยสุ่ม
เนื่องจากโค้ดไม่มี loop การทำงานน่าจะถือว่าไวแล้วนะครับ และเท่าที่ผมเช็ค ค่าที่ออกมาก็น่าจะเป็นไปได้ทุกกรณี อัตราออกทั้ง 5 น่าจะเท่าเทียมกันนะครับ ปล. เอาไปตรวจสอบอีกทีด้วยนะครับผม อาจบั๊ก *0* (แต่ผมก็ลองดูหลายรอบละนา) โค๊ด: <?php หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: NightClub ที่ 08 มีนาคม 2012, 01:35:32 ถ้าจะให้เท่าเทียมกันจริง ต้องมีการสลับค่าการเรียง str agi vit dex ก่อนหลังด้วยครับ แล้วค่อยเอามาเข้าสูตร
จากนั้นทุกอัน ทำการ แรนดอม 0,1000 แล้วนำมาเทียบอัตราส่วนกันอีกทีครับ โดยตั้งที่ผลรวมของทุกค่า แล้วหาร 5 แล้วเทียบเปอเซน พวกเศษที่เกินมา ให้วน + 1 ตามการเรียงในขั้นต้น หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: powerbeer001 ที่ 08 มีนาคม 2012, 07:07:33 สุ่มมา 4 ตัวก่อน แล้วตัวที่ 5 เอาส่วนต่าง
เข่น r1=ramdom(500); r2=ramdom(500); r3=ramdom(500); r4=ramdom(500) r5=(r1+r2+r3+r4+)-500; หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: dreamer ที่ 08 มีนาคม 2012, 07:27:51 สุ่มมา 4 ตัวก่อน แล้วตัวที่ 5 เอาส่วนต่าง เข่น r1=ramdom(500); r2=ramdom(500); r3=ramdom(500); r4=ramdom(500) r5=(r1+r2+r3+r4+)-500; กรณีที่ r1 = r2 =r3 = 0 คำตอบจะไม่ถูกต้องครับ หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: few_wer ที่ 08 มีนาคม 2012, 07:57:54 ลองให้ random ตัวเลขเก็บลง a,b,c,d,e แล้วก็เอามาบวกกันก่อน แล้วเก็บไว้ใน sum แล้วก็เอา sum ไปเทียบเอาก็ได้มั้ง
sum=a+b+c+d+e; แล้วก็ใช้ while(sum=500){ if(sum มากกว่า 500){a--;b--;c--......} else if(sum น้อยกว่า 500){a++;b++;c++....} sum=a+b+c+d+e; } . . . ประมาณนี้ก็ได้ล่ะมั้ง ถูกเปล่าไม่รู้ เอิ้กๆ หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: MeenyFancy ที่ 08 มีนาคม 2012, 08:14:58 โจทย์ง่ายๆ อย่าคิดเยอะครับ
โค๊ด: <?php หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: dreamer ที่ 08 มีนาคม 2012, 08:46:26 โจทย์ง่ายๆ อย่าคิดเยอะครับ โค๊ด: <?php ----- ผมลอง run ดู เจอ case ที่ไม่ถูกต้องครับ 170 : 187 : 112 : 63 : -32 200 : 172 : 4 : 139 : -15 176 : 195 : 172 : 67 : -110 196 : 19 : 191 : 159 : -65 หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: MeenyFancy ที่ 08 มีนาคม 2012, 09:59:15 ขอบคุณครับ เวอชั่นแก้บัก
โค๊ด: <?php หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: seoโออิชิ ที่ 08 มีนาคม 2012, 10:28:44 เขียนสั้นสุด ง่ายสุด แต่โปรแกรมทำงานนานสุด
ตั้งค่า ตัวแปล 5 ตัว a,b,c,d,e = 0-200 แล้วให้มัน แรนด้อม ไปเลย ผลลับออกมาได้เท่าไหร่นำมาบวกกันถ้าไม่เท่ากับ 500 ให้แรนด้อมใหม่ทั้งหมด ถ้าเท่ากับ 500 สั่ง print ถ้าเทียบกับของผมอันบน แล้วแต่ ความต้องการครับว่า ต้องการให้เขียนโปรแกรมให้สั้นสุด หรือเขียนให้รันเร็วสุด แต่แบบนี้กว่าจะได้แต่ล๊ะ case นานกว่ามาก :wanwan024: :wanwan004: หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: guzzilar ที่ 08 มีนาคม 2012, 10:52:40 เขียนสั้นสุด ง่ายสุด แต่โปรแกรมทำงานนานสุด จัดไปตั้งค่า ตัวแปล 5 ตัว a,b,c,d,e = 0-200 แล้วให้มัน แรนด้อม ไปเลย ผลลับออกมาได้เท่าไหร่นำมาบวกกันถ้าไม่เท่ากับ 500 ให้แรนด้อมใหม่ทั้งหมด ถ้าเท่ากับ 500 สั่ง print ถ้าเทียบกับของผมอันบน แล้วแต่ ความต้องการครับว่า ต้องการให้เขียนโปรแกรมให้สั้นสุด หรือเขียนให้รันเร็วสุด แต่แบบนี้กว่าจะได้แต่ล๊ะ case นานกว่ามาก :wanwan024: :wanwan004: <?php do{ $a = rand(0,200); $b = rand(0,200); $c = rand(0,200); $d = rand(0,200); $e = rand(0,200); }while($a+$b+$c+$d+$e != 500); echo $a.'--'.$b.'--'.$c.'--'.$d.'--'.$e; echo '<br/>'; echo $a+$b+$c+$d+$e; ?> :wanwan004: :wanwan004: :wanwan004: หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดū เริ่มหัวข้อโดย: ahon ที่ 08 มีนาคม 2012, 11:33:58 <?php
//ลองแบบผมดู $tmp = array(); $min = 10; $max = 200; $max_all = 500; // res val $sum= 0; $max_tmp = 0; for($i=0;$i<5;$i++){ $tmp[$i]= rand($min,$max); } for($i=0;$i<10;$i++){ $sum = get_sum($tmp); if($sum > $max_all){ $adj = $sum - $max_all ; $ik_slot = rand(0,4); if( $tmp[$ik_slot] - $adj > $min ){ $tmp[$ik_slot] -= $adj ; break; }else{ if( $tmp[$ik_slot] - ($adj/2) > $min ){ $tmp[$ik_slot] -= (int)($adj/2) ; break; } } }else{//ทำตรงข้ามกับเคสด้านบน } } // show var_dump($tmp); ////////////////////////////////// function get_sum($tmp){ $sum = 0; for($i=0;$i<5;$i++){ $sum += $tmp[$i]; } return $sum; } ?> หัวข้อ: Re: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี เริ่มหัวข้อโดย: NightClub ที่ 09 มีนาคม 2012, 03:18:47 เพิ่งคิดได้เมื่อเช้า เลยมาเสริมนิด
โค๊ด: $randomcount = 0; |