12 August 2014

Quiz 9: 500 closed doors problem

Problem:
There are 500 closed doors along a corridor, numbered from 1 to 500. A person walks through the corridor and opens each door. Another person walks through the corridor and closes every alternate door. Continuing in this manner, the i-th person comes and toggles the position of every i-th door starting from door i. You are to determine exactly how many doors are open after the 500-th person has walked through the corridor.

Sample Input:
500

Sample Output:
no of doors opened after 500-th person walked through the corridor having 500 doors is 22

Solution:

$num = 500;
@arr;
for(my $i=0;$i<$num;$i++)
{
$arr[$i] = 0;
}
for(my $i=0;$i<$num;$i++)
{
   for(my $j=$i;$j<$num;$j++)
   {
   if($arr[$j] == 0)
      {
      $arr[$j]=1;
      }
   elsif($arr[$j] == 1)
      {
      $arr[$j]=0;
      }
   $j = $j + $i;
   }
}
$tmp = 0;
foreach(@arr){
             if($_ == 1)
                {
                $tmp++;
                }
              }
print "no of doors opened after $num-th person walked through the corridor having $num doors is $tmp";

Tips:
  • Simple solution is nearest square root ie square root of 500 is 22.36, so answer is 22

No comments:

Post a Comment