采用Ruby 实现丢手帕问题

来源:互联网 发布:手机家具设计软件 编辑:程序博客网 时间:2024/04/20 11:54

#题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
 #凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

#实现思想:将数组中的所有元素都定义为1,从第一个开始累加求sum,设计一个下标i,
#如果sum=3,则将进3的元素定为0,sum=0,继续求和,直到最后一个元素
#判断如果是最后一个元素,转移index到0,又重新开始

def lose_shoupa(n)
arr = Array.new(n){|e|e=1}  #定义一个长度为n的全部元素都是1的数组
count = n
sum = 0
i,j =0,0

 while count >1  #count控制循环次数,当它为1的时候,就是最后一个元素了
   if arr[i] == 1
     sum = sum + arr[i]
     #p "sum=#{sum}"
   end
   
   if sum == 3
     sum = 0
     arr[i] = 0
     count = count - 1
     #p "i=#{i},a[i]=#{arr[i]},sum=#{sum}"
   end
   
   i +=1
   
   if i == n  #这一行是关键,实现下标的转移,又从第一个开始
     i = 0
   end
 end


 p arr


 for j in (0..n)
  if arr[j] == 1
    p "the last number is: #{j+1}"
  end
 end

end

原创粉丝点击