ถ้า 500000 ยังสร้างอาเรย์ไม่ได้เลยคับ
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in E:\WWW\test1\index.php on line 14
ตรงบรรทัด
$ppl_arr[] = ++$i;
ถ้า 500000 ยังสร้างอาเรย์ไม่ได้เลยคับ
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in E:\WWW\test1\index.php on line 14
ตรงบรรทัด
$ppl_arr[] = ++$i;
Progressive rock blood.
ยังไม่ใช่ครับ เพราะว่าถ้าหารไปเรื่อยๆมันจะมีเลขปลายๆที่หายไปครับ500000 หาร 2 ไปเรื่อย ๆ จนเหลือ 0
จะได้วงรอบ เอาวงรอบคูณ 2 ลบด้วย 500000
จะได้ตัวเลขสุดท้ายที่จะอยู่
ใช่รึเปล่าครับ เลขอะไรไม่รู้อ่ะครับ
ไม่มีความรู้ทางด้านการเขียนโปรแกรมเลยครับ
ไครรู้ช่วยทีซิ
[/b]
ที่ผมกำหนดให้ 500000 เพราะว่ามันจะได้ error นั่นแหละครับถ้า 500000 ยังสร้างอาเรย์ไม่ได้เลยคับ
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in E:\WWW\test1\index.php on line 14
ตรงบรรทัด
$ppl_arr[] = ++$i;
[/b]
เทคนิกที่สองหาโดยไม่ต้องเขียนโปรแกรมสามารถทำได้ด้วยนะครับ
วางข้อมูลไว้เป็นสมการได้ ตัวอย่างเช่น
100 ตัว
รอบ 1 เริ่มนับ 0 เลขที่เหลือคือ 2n คนสุดท้ายนับ 1 เหลือทั้งหมด 100/2 = 50 คน
รอบ 2 เริ่มนับ 0 เลขที่เหลือคือ 4n คนสุดท้ายนับ 1 เหลือทั้งหมด 50/2 = 25 คน
รอบ 3 เริ่มนับ 0 เลขที่เหลือคือ 8n คนสุดท้ายนับ 0 เหลือทั้งหมด 25/2 ปัดลง = 12 คน
รอบ 4 เริ่มนับ 1 เลขที่เหลือคือ 8(2n-1) คนสุดท้ายนับ 0 เหลือทั้งหมด 12/2 = 6 คน
รอบ 5 เริ่มนับ 1 เลขที่เหลือคือ 8(2(2n-1)-1) คนสุดท้ายนับ 0 เหลือทั้งหมด 6/2 = 3 คน
รอบ 6 เริ่มนับ 1 เลขที่เหลือคือ 8(2(2(2n-1)-1)-1) คนสุดท้ายนับ 1 เหลือทั้งหมด 3/2 ปัดขึ้น = 2 คน
รอบ 7 เริ่มนับ 0 เลขที่เหลือคือ 8(2(2(2(2n)-1)-1)-1) คนสุดท้ายนับ 1 เหลือทั้งหมด 2/1 = 1 คน
เหลือ 1 คนแล้ว ใส่ค่า 1 ใน n จะได้คำตอบว่าเป็น 72 ครับ
คิดมือนี่เหนื่อยเหมือนกันนะเนี่ย ปัญหาง่ายๆแต่พอมาเป็นการคำนวนแล้วปวดหัวดีจริงๆ
จากที่ผมใช้เวลา 20 นาทีมั่วออกมาได้ดังนี้
คนสุดท้ายคือ 262144 (ทำไมมีความรู้สึกว่าไม่น่าจะถูกก็ไม่รุ = =)
วิธีคิดของผม
**Hidden Content: To see this hidden content your post count must be 1 or greater.**
ก็ได้ตามนั้นแหละครับ จะถูกมั๊ยล่ะเนี่ย = =
ยังไม่ถูกครับ เพราะว่าสังเกตุที่การหักออกแต่ละครั้งนั้นจากที่ผมใช้เวลา 20 นาทีมั่วออกมาได้ดังนี้
คนสุดท้ายคือ 262144 (ทำไมมีความรู้สึกว่าไม่น่าจะถูกก็ไม่รุ = =)
ก็ได้ตามนั้นแหละครับ จะถูกมั๊ยล่ะเนี่ย = =
[/b]
บางครั้งเหลือจำนวนคนเป็นจำนวนคี่ ทำให้การนับไม่ตรงแบบ 2^n ครับ
ตอบคุณ retool2 นะครับ
คุณบอกเพื่อให้มันเออเร่อ ดังนั้น ผมจังไปแก้ที่ php.ini ตรงบรรทัด
memory_limit = 8M ; Maximum amount of memory a script may consume (8M
เปลี่ยนเป็น 50M
ดังนั้น คำตอบคือ
คนที่มีเบอร์ 475712 ครับ
Progressive rock blood.
เพิ่งกลับไปอ่านโจทย์มาใหม่ยังไม่ถูกครับ เพราะว่าสังเกตุที่การหักออกแต่ละครั้งนั้น
บางครั้งเหลือจำนวนคนเป็นจำนวนคี่ ทำให้การนับไม่ตรงแบบ 2^n ครับ
[/b]
สรุปแล้ว ลืมไปว่ายืนกันเป็นวงกลม = =
เด๋วไว้ว่างๆอีกทีค่อยคิดใหม่ = =
โอ้ย อ่านโจทย์ไม่ละเอียด ขอตอบใหม่อีกรอบ
**Hidden Content: To see this hidden content your post count must be 5 or greater.**
edit: แก้คำผิด
475712 เป็นคำตอบที่ถูกต้องครับ(ไม่รู้ว่าเครื่องคำนวนนานไหมนะครับ)ตอบคุณ retool2 นะครับ
คุณบอกเพื่อให้มันเออเร่อ ดังนั้น ผมจังไปแก้ที่ php.ini ตรงบรรทัด
memory_limit = 8M ; Maximum amount of memory a script may consume (8M
เปลี่ยนเป็น 50M
ดังนั้น คำตอบคือ
คนที่มีเบอร์ 475712 ครับ
[/b]
แต่ผมแนะนำเพิ่มเติมนะครับ ถ้าใครสังเหตุดีๆจะเห็นว่าถ้าเราใช้จำนวนคนเป็น
2 4 8 16 32 64 128 จะได้คำตอบออกมาเป็น 2 4 8 16 32 64 128
มันกลายเป็นลำดับทันทีเลยครับ ลองใส่ค่าคนเป็น 2 3 4 5 6 7 8 9 10 11 ... ถึงสัก 64
จะเริ่มเห็นความสัมพันธ์ครับ จะเห็นว่าความสัมพันธ์เป็นแบบ เพิ่มขึ้นทีละ 2 ไปเรื่อยๆ
จนมากกว่าจำนวนคน แล้วจากนั้นจะกลับไปเริ่มใหม่ที่ 2
ผมเลยเขียนโปรแกรมใหม่ หาได้เร็วขึ้นกว่าเดิมแต่หาได้แต่คำตอบ ไม่มีรายละเอียดแต่ละรอบเหมือนอันแรกดังนี้
Start with 0
and count 0 is out
input = : 500000 people.
answer = : 475712
Calculation time is 0.275274991989 seconds [/b]![]()
[hide=5][code]
<body onload="document.people.people.focus();">
<form action="" method="post" name="people">
<input type="number" name="people"/>
<input name="submit" type="submit" value="Count"/>
</form>
Start with 0
and count 0 is out
<?php
if(!isset($people)){die();}
if($_POST['people']<=0 || !is_numeric($people)){die("Input must number only and more than 0");}
$time_start = microtime(true);
$answer = findlast($_POST['people']);
echo "input = : ".$_POST['people']." people.
";
echo "answer = : ".$answer."
";
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Calculation time is $time seconds\n";
function findlast($in){
Actions : (View-Readers)
There are no names to display.