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

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

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingสุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี
หน้า: [1] 2  ทั้งหมด   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี  (อ่าน 5730 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
hurahura
สมุนแก๊งเสียว
*

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

กระทู้: 868



ดูรายละเอียด
« เมื่อ: 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
เขียนแบบไหนถึงจะดีที่สุดครับ ขอบคุณครับ

« แก้ไขครั้งสุดท้าย: 07 มีนาคม 2012, 18:26:51 โดย hurahura » บันทึกการเข้า
seoโออิชิ
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,051



ดูรายละเอียด
« ตอบ #1 เมื่อ: 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 สุดท้ายคงไม่ต้องสุ่มใช้ลบที่เหลือเอาเลย

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

. . ช้า ๆ ได้พร้าเล่มงาม เร็ว ๆ ได้พร้าอย่างงาม 2 เล่ม . . .
mukemgiz
ก๊วนเสียว
*

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

กระทู้: 449



ดูรายละเอียด
« ตอบ #2 เมื่อ: 07 มีนาคม 2012, 19:01:22 »

ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น  str ไปโลด  wanwan004 wanwan004 wanwan004
บันทึกการเข้า
seoโออิชิ
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,051



ดูรายละเอียด
« ตอบ #3 เมื่อ: 07 มีนาคม 2012, 19:32:43 »

ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น  str ไปโลด  wanwan004 wanwan004 wanwan004
เล่นซ๊ะงงเลย นั่งนึกตั้งนาน  wanwan024
บันทึกการเข้า

. . ช้า ๆ ได้พร้าเล่มงาม เร็ว ๆ ได้พร้าอย่างงาม 2 เล่ม . . .
Extra Cash
สมุนแก๊งเสียว
*

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

กระทู้: 631



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 07 มีนาคม 2012, 20:07:16 »

สุ่มมาแค่ 4 ตัวพอครับ
ตัวที่ 5 เอาผลรวมของ 4 ตัวแรกไปลบ 500
บันทึกการเข้า

oDarkIceo
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,059



ดูรายละเอียด
« ตอบ #5 เมื่อ: 07 มีนาคม 2012, 20:08:52 »

ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น  str ไปโลด  wanwan004 wanwan004 wanwan004
เล่นซ๊ะงงเลย นั่งนึกตั้งนาน  wanwan024

55555 เลย
บันทึกการเข้า
077023
ก๊วนเสียว
*

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

กระทู้: 468



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 07 มีนาคม 2012, 20:30:13 »

dex หายอ่ะ     Embarrassed Embarrassed Embarrassed
« แก้ไขครั้งสุดท้าย: 07 มีนาคม 2012, 20:30:28 โดย 077023 » บันทึกการเข้า

Preorder ญี่ปุ่น
077023
Preorderสิ้นค้าญี่ปุ่น
[img=http://www.jangpic.com/test_count_thaiseo.php/[/img]
Haniba55
Verified Seller
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,600



ดูรายละเอียด
« ตอบ #7 เมื่อ: 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
« แก้ไขครั้งสุดท้าย: 07 มีนาคม 2012, 21:58:21 โดย Haniba55 » บันทึกการเข้า
hurahura
สมุนแก๊งเสียว
*

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

กระทู้: 868



ดูรายละเอียด
« ตอบ #8 เมื่อ: 07 มีนาคม 2012, 22:17:16 »

ตอนนี้วิธีของคุณ seoโออิชิ ดีที่สุด ผมลองทำดูแล้ว แต่ต้องเพิ่มนู่นนี่อีกนิด
ขอบคุณ Haniba55 ก็น่าจะโอเค ผมยังไม่ได้ลองทำนะ แต่คิดว่า มันอาจจะไม่ค่อยเท่าเทียมกันแต่ละตัวหรือเปล่า
ตามโจทย์คือ "โดยเลขทั้ง 5 ตัวมีโอกาสเท่ากันที่จะได้ค่ามากหรือน้อย"

ยังรอแนวคิดของท่านอื่นๆอยู่นะครับ
« แก้ไขครั้งสุดท้าย: 07 มีนาคม 2012, 22:21:51 โดย hurahura » บันทึกการเข้า
seoโออิชิ
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,051



ดูรายละเอียด
« ตอบ #9 เมื่อ: 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
ค่าที่ได้ไม่หลากหลายก็จริงแต่การเขียนแบบนี้โปรแกรมจะทำงานเร็วกว่าแบบที่ผมตอบเล่น ๆ หลายเท่าตัว
บันทึกการเข้า

. . ช้า ๆ ได้พร้าเล่มงาม เร็ว ๆ ได้พร้าอย่างงาม 2 เล่ม . . .
hurahura
สมุนแก๊งเสียว
*

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

กระทู้: 868



ดูรายละเอียด
« ตอบ #10 เมื่อ: 07 มีนาคม 2012, 22:23:07 »

เอ... มันเร็วกว่าจริงๆเหรอครับ

เดี๋ยวต้องลองไปเทียบดู
บันทึกการเข้า
dreamer
คนรักเสียว
*

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

กระทู้: 134



ดูรายละเอียด
« ตอบ #11 เมื่อ: 07 มีนาคม 2012, 22:34:45 »

ผมลองเขียน code เป็นภาษา php
ลองรันหลายรอบก็ถูกนะครับ
วิธีการก็ตาม code เลยครับ

----
แก้ไข : เพิ่งย้อนกลับไปอ่าน วิธีการของผมคล้ายกับของคุณ Haniba55 แต่ทำให้เป็น general กว่าครับ

----------------------
โค๊ด:
<?php
$max_index 5;
$max_value 200;
$min_value 0;
$total 500;

$values = array();
for($n 1$n <= ($max_index-1); $n++)
{
$sum_before 0;
for($o 1$o $n$o++)
{
$sum_before += $values[$o];
}

#min value for random
$min $total $sum_before - (($max_index $n) * $max_value);
if($min $min_value)
{
$min $min_value;
}

#max value for random
$max $total $sum_before;
if($max $max_value)
{
$max =$max_value;
}

$values[$n] = rand($min$max);
}

$sum_before 0;
for($o 1$o $max_index$o++)
{
$sum_before += $values[$o];
}
$values[$max_index] = $total $sum_before;

print "<pre>";
print_r($values);
print "</pre>";

$sum 0;
foreach($values as $value)
{
$sum += $value;
}

print "total is : $sum";

?>


« แก้ไขครั้งสุดท้าย: 07 มีนาคม 2012, 22:40:08 โดย dreamer » บันทึกการเข้า
Splendith
คนรักเสียว
*

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

กระทู้: 152



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 08 มีนาคม 2012, 01:26:37 »

ขอลองเสนอวิธีผมมั่งครับ โดยการคำนวณช่วงที่สามารถสุ่มได้ก่อน แล้วจึงค่อยสุ่ม
เนื่องจากโค้ดไม่มี loop การทำงานน่าจะถือว่าไวแล้วนะครับ
และเท่าที่ผมเช็ค ค่าที่ออกมาก็น่าจะเป็นไปได้ทุกกรณี อัตราออกทั้ง 5 น่าจะเท่าเทียมกันนะครับ

ปล. เอาไปตรวจสอบอีกทีด้วยนะครับผม อาจบั๊ก *0* (แต่ผมก็ลองดูหลายรอบละนา)

โค๊ด:
<?php 
function 
check1($a$b)
{
return $a>$b?$a:$b;
}
function check2($a$b)
{
return $a>$b?$b:$a;
}

$s = array();

$s[0] = rand(0200);
$s[1] = rand(0200);
$tmp check1(100-$s[0]-$s[1], 0);
$s[2] = rand($tmpcheck2(500-$s[0]-$s[1], 200));
$tmp check1(300-$s[0]-$s[1]-$s[2], 0);
$s[3] = rand($tmpcheck2(500-$s[0]-$s[1]-$s[2], 200));
$s[4] = 500-$s[0]-$s[1]-$s[2]-$s[3];

// เพื่อความชัวร์ในความเท่าเทียม ให้เปิดด้านล่างเพื่อเปิดการสุ่มสลับตำแหน่งทั้งหมดใน Array โดยส่วนตัวผมคิดว่าไม่จำเป็นนะ (เพราะการสุ่มตั้งแต่แรกมันก็น่าจะเท่าเทียมพอ)
// shuffle($s)

echo "$s[0] $s[1] $s[2] $s[3] $s[4] = " . ($s[0] + $s[1] + $s[2] + $s[3] + $s[4]);
?>

« แก้ไขครั้งสุดท้าย: 08 มีนาคม 2012, 01:39:50 โดย Splendith » บันทึกการเข้า

NightClub
หัวหน้าแก๊งเสียว
*

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

กระทู้: 2,461



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 08 มีนาคม 2012, 01:35:32 »

ถ้าจะให้เท่าเทียมกันจริง ต้องมีการสลับค่าการเรียง str agi vit dex ก่อนหลังด้วยครับ แล้วค่อยเอามาเข้าสูตร

จากนั้นทุกอัน ทำการ แรนดอม 0,1000 แล้วนำมาเทียบอัตราส่วนกันอีกทีครับ โดยตั้งที่ผลรวมของทุกค่า แล้วหาร 5 แล้วเทียบเปอเซน

พวกเศษที่เกินมา ให้วน + 1 ตามการเรียงในขั้นต้น

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

รับจ้างเขียนโปรแกรม PHP งานมืออาชีพ เสร็จตามที่กำหนด ราคาปานกลาง
เหมาะกับผู้ที่รับงานมาแล้วส่งต่อจ๊ะ PM มาเลย
powerbeer001
Verified Seller
สมุนแก๊งเสียว
*

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

กระทู้: 888



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

dreamer
คนรักเสียว
*

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

กระทู้: 134



ดูรายละเอียด
« ตอบ #15 เมื่อ: 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 คำตอบจะไม่ถูกต้องครับ
บันทึกการเข้า
few_wer
ก๊วนเสียว
*

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

กระทู้: 386



ดูรายละเอียด
« ตอบ #16 เมื่อ: 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;

}
.
.
.

ประมาณนี้ก็ได้ล่ะมั้ง
ถูกเปล่าไม่รู้ เอิ้กๆ
« แก้ไขครั้งสุดท้าย: 08 มีนาคม 2012, 08:01:42 โดย few_wer » บันทึกการเข้า

Host Gator
Baby plan 0.01 US คูปองโดนๆ "welovenayloung"
ลด 25% คูปองโดนๆอีก "PomRukNayLoung"
MeenyFancy
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,270



ดูรายละเอียด
« ตอบ #17 เมื่อ: 08 มีนาคม 2012, 08:14:58 »

โจทย์ง่ายๆ อย่าคิดเยอะครับ
โค๊ด:
<?php
$max 
500;
$rv 200;
if(
$max $rv$mxx $rv;

$a rand(0,$mxx);
$max $max-$a;

if(
$max $rv$mxx $rv;
$b rand(0,$mxx);
$max $max-$b;

if(
$max $rv$mxx $rv;
$c rand(0,$mxx);
$max $max-$c;

if(
$max $rv$mxx $rv;
$d rand(0,$mxx);
$max $max-$d;

$e $max;

echo 
$a" : "$b" : "$c" : "$d" : "$e;
?>

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

dreamer
คนรักเสียว
*

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

กระทู้: 134



ดูรายละเอียด
« ตอบ #18 เมื่อ: 08 มีนาคม 2012, 08:46:26 »

โจทย์ง่ายๆ อย่าคิดเยอะครับ
โค๊ด:
<?php
$max 
500;
$rv 200;
if(
$max $rv$mxx $rv;

$a rand(0,$mxx);
$max $max-$a;

if(
$max $rv$mxx $rv;
$b rand(0,$mxx);
$max $max-$b;

if(
$max $rv$mxx $rv;
$c rand(0,$mxx);
$max $max-$c;

if(
$max $rv$mxx $rv;
$d rand(0,$mxx);
$max $max-$d;

$e $max;

echo 
$a" : "$b" : "$c" : "$d" : "$e;
?>


-----
ผมลอง run ดู เจอ case ที่ไม่ถูกต้องครับ

170 : 187 : 112 : 63 : -32

200 : 172 : 4 : 139 : -15

176 : 195 : 172 : 67 : -110

196 : 19 : 191 : 159 : -65
บันทึกการเข้า
MeenyFancy
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,270



ดูรายละเอียด
« ตอบ #19 เมื่อ: 08 มีนาคม 2012, 09:59:15 »

ขอบคุณครับ เวอชั่นแก้บัก
โค๊ด:
<?php
for ($i=0$i<=100$i++){
$e 255;
while($e>200) {
$max 500;
$rv 200;
if($max $rv) { $mxx $rv; } else {$mxx $max; }
$a rand(0,$mxx);
$max $max-$a;

if($max $rv) { $mxx $rv; } else {$mxx $max; }
$b rand(0,$mxx);
$max $max-$b;

if($max $rv) { $mxx $rv; } else {$mxx $max; }
$c rand(0,$mxx);
$max $max-$c;

if($max $rv) { $mxx $rv; } else {$mxx $max; }
$d rand(0,$mxx);
$max $max-$d;
$e $max;
}
echo $a" : "$b" : "$c" : "$d" : "$e "<br>";
}
?>

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

หน้า: [1] 2  ทั้งหมด   ขึ้นบน
พิมพ์