สุ่มตัวเลขออกมา 5 ตัวใ้ห้รวมกันได้ 500 พอดี

เริ่มโดย hurahura, 07 มีนาคม 2012, 18:24:01

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

hurahura

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


seoโออิชิ

เหมือนเล่นเกมส์สนุก ๆ เลย ตอบแบบสนุกนะครับผมก็ไม่รู้มาก เรื่องการเขียนแล้วเช็คว่าค่าเกิน 500 รึยังอันนี้คงไม่จำเป็นต้องพูด
เลขที่สุ่มออกมาแต่ล๊ะรอบนั้น ลบจาก 500 เหลือเท่าไหร่หารด้วยจำนวนครั้งที่เหลือ หากเกิน 200 สุ่มใหม่


เช่นครั้งแรกสุ่มได้ 10 ก็นำ 490 หารด้วย 4 (จำนวนครั้ง)ที่เหลือ ได้ 122.5 ถือว่าผ่านสุ่มตัวที่ 2 ต่อเลย
ตัวที่ 2 สมมุติได้ 20 ก็ได้ 470 หาร 3 (จำนวนครั้งที่เหลือ) ได้ 156 ถือว่าผ่านสุ่มต่อตัวที่  3
ตัวที่ 3 เจ้ากรรมได้ 30 ทีนี้จะเป็น 440 หารด้วย 2 ทีนี้หละเกิน200แล้ว ให้สุ่มตัวที่ 3 มาใหม่
ตัวที่5 สุดท้ายคงไม่ต้องสุ่มใช้ลบที่เหลือเอาเลย

[direct=http://].[/direct] [direct=http://].[/direct] ช้า ๆ ได้พร้าเล่มงาม เร็ว ๆ ได้พร้าอย่างงาม 2 เล่ม [direct=http://].[/direct] [direct=http://].[/direct][direct=http://].[/direct]

mukemgiz

ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น  str ไปโลด  :wanwan004: :wanwan004: :wanwan004:

seoโออิชิ

อ้างถึงจาก: mukemgiz ใน 07 มีนาคม 2012, 19:01:22
ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น  str ไปโลด  :wanwan004: :wanwan004: :wanwan004:
เล่นซ๊ะงงเลย นั่งนึกตั้งนาน  :wanwan024:
[direct=http://].[/direct] [direct=http://].[/direct] ช้า ๆ ได้พร้าเล่มงาม เร็ว ๆ ได้พร้าอย่างงาม 2 เล่ม [direct=http://].[/direct] [direct=http://].[/direct][direct=http://].[/direct]

Extra Cash

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

[direct=http://www.prodipper.com]PRO DIPPER
ตัวแทนจำหน่าย สีลอกได้ Plasti Dip แท้
อย่างเป็นทางการจาก Performix อเมริกา
[/direct]
       [direct=http://www.votejung.com]โหวดจัง
       โปรโมทเว็บไซต์ฟรี![/direct]
       [direct=http://fbfansmaster.com]FB FANS MASTER
       Buy Facebook Likes[/direct]

oDarkIceo

อ้างถึงจาก: seoโออิชิ ใน 07 มีนาคม 2012, 19:32:43
อ้างถึงจาก: mukemgiz ใน 07 มีนาคม 2012, 19:01:22
ต้องดูด้วยเราเล่นสายอาชีพอะไร ถ้า warrior เน้น  str ไปโลด  :wanwan004: :wanwan004: :wanwan004:
เล่นซ๊ะงงเลย นั่งนึกตั้งนาน  :wanwan024:

55555 เลย

077023

dex หายอ่ะ     :-[ :-[ :-[
[direct=http://tokyo-cool.com]Preorder ญี่ปุ่น[/direct]
[direct=http://077023.com]077023[/direct]
[direct=http://tokyo-cool.com]Preorderสิ้นค้าญี่ปุ่น[/direct]
[img=http://www.jangpic.com/test_count_thaiseo.php/[/img]

Haniba55

อ้างถึงจาก: Extra Cash ใน 07 มีนาคม 2012, 20:07:16
สุ่มมาแค่ 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

hurahura

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

ยังรอแนวคิดของท่านอื่นๆอยู่นะครับ

seoโออิชิ

อ้างถึงจาก: Haniba55 ใน 07 มีนาคม 2012, 21:38:41
อ้างถึงจาก: Extra Cash ใน 07 มีนาคม 2012, 20:07:16
สุ่มมาแค่ 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
ค่าที่ได้ไม่หลากหลายก็จริงแต่การเขียนแบบนี้โปรแกรมจะทำงานเร็วกว่าแบบที่ผมตอบเล่น ๆ หลายเท่าตัว
[direct=http://].[/direct] [direct=http://].[/direct] ช้า ๆ ได้พร้าเล่มงาม เร็ว ๆ ได้พร้าอย่างงาม 2 เล่ม [direct=http://].[/direct] [direct=http://].[/direct][direct=http://].[/direct]

hurahura

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

เดี๋ยวต้องลองไปเทียบดู

dreamer

ผมลองเขียน 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";

?>



Splendith

ขอลองเสนอวิธีผมมั่งครับ โดยการคำนวณช่วงที่สามารถสุ่มได้ก่อน แล้วจึงค่อยสุ่ม
เนื่องจากโค้ดไม่มี 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]);
?>


[direct=http://www.golity.com]Golity - บล็อกพาชมภาพเที่ยว ที่พัก กิน ไปแล้วดี มีบอกต่อ[/direct]

NightClub

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

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

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

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

powerbeer001

สุ่มมา 4 ตัวก่อน แล้วตัวที่ 5 เอาส่วนต่าง

เข่น

r1=ramdom(500);
r2=ramdom(500);
r3=ramdom(500);
r4=ramdom(500)
r5=(r1+r2+r3+r4+)-500;
อ้างถึง
[direct=https://www.examvify.com] ระบบฐานข้อมูลข้อสอบและห้องสอบออนไลน์ฟรี [/direct]

อ้างถึง
[direct=https://www.posvis.com] โปรแกรมบริหารร้านค้า POS ฟรี [/direct]

dreamer

อ้างถึงจาก: 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;


กรณีที่ r1 = r2 =r3 = 0 คำตอบจะไม่ถูกต้องครับ

few_wer

ลองให้ 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;

}
.
.
.

ประมาณนี้ก็ได้ล่ะมั้ง
ถูกเปล่าไม่รู้ เอิ้กๆ
Host Gator
Baby plan 0.01 US คูปองโดนๆ "welovenayloung"
ลด 25% คูปองโดนๆอีก "PomRukNayLoung"

MeenyFancy

โจทย์ง่ายๆ อย่าคิดเยอะครับ

<?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;
?>

Have a good trip.
[direct=http://petdeecare.com]สุนัขป่วย[/direct] [direct=http://petdeecare.com]แมวป่วย[/direct]
[direct=http://petdeecare.com]หนูป่วย[/direct] [direct=http://petdeecare.com]อาหารแมว[/direct] [direct=http://petdeecare.com]อาหารหมา[/direct]

dreamer

อ้างถึงจาก: MeenyFancy ใน 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;
?>



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

170 : 187 : 112 : 63 : -32

200 : 172 : 4 : 139 : -15

176 : 195 : 172 : 67 : -110

196 : 19 : 191 : 159 : -65

MeenyFancy

ขอบคุณครับ เวอชั่นแก้บัก

<?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>";
}
?>

Have a good trip.
[direct=http://petdeecare.com]สุนัขป่วย[/direct] [direct=http://petdeecare.com]แมวป่วย[/direct]
[direct=http://petdeecare.com]หนูป่วย[/direct] [direct=http://petdeecare.com]อาหารแมว[/direct] [direct=http://petdeecare.com]อาหารหมา[/direct]