关于个算法

关于个算法

从前台接受个值
如果范围是1..6 计算的1 
如果范围是7..12 计算的7
如果范围是13..18 计算的13
如果范围是19..24 计算的19 
如此类推
....
谢谢
感觉不是很难好象就是搞不定。。。
问题还没有描述清楚啊
接受的这个值类型是范围吗??
如果这个直是个整数,那么你需要判断这个值所在的范围,然后再计算,是吗?
这些范围是固定的吗(意思就是范围的长度都是6吗?)?不是随机的吧?

如果接受的值是一个整数,那么先判断他所在范围(假定这些范围是固定的):

[Copy to clipboard] [ - ]


[Copy to clipboard] [ - ]
很漂亮的算法 学习了(楼上的理解的是对的)

可以简单指导下 解决这样问题的思路吗?
r = (arr..(arr+5)) 
    if r === num
     num = r.min+1
     puts num
     end  
这里 没看明白 r是个范围 而num是个值 r===num 这个怎么理解?
思路就是:
可以把这些范围看成分组,根据传入的直的大小,可以确定它在哪个分组里。
这个直除以六就可以确定有几个分组,假如传入的值是7,除六取整得一,则有两个分组。这个直必然在最后的分组里。。。

但是有临界点。。。就是当那个直可以被6整除的时候。如传入12,除六得2,这就是临界点。这个直必然是第二组范围的最大直。
分成两种情况,被整除的时候,不被整除的时候。
r === num,相当于 r.include?(num)
不知道我解释清楚没有

思路了解了

后一个问题 还是用例子说明的好。。r.include?(num) 这个的意思应该就是是否包含num?
还是用个数字说明的好
def n(num)
 m = num % 6
 arr=(num/6)*6.to_i # 编组
 if num <= 6 #唯一的情况
  num = 1
  puts num
 else
  if m == 0 #当前能够被整除
   r = ((arr-5)..arr) # 重新组织编组中的元素?
   if r === num # 如果num是r中的元素
    num = r.min # 把r中的最小值给num
    puts num
   end
  else      # 当前不能整除
   r = (arr..(arr+5)) # 重新组织编组中的元素?
    if r === num # 如果num是r中的元素
     num = r.min+1 # 把r的最小值加1给num
     puts num
     end  
  end
  
 end

end
解读了下 有?的不理解 加5? 减5?

[ 本帖最后由 xnine 于 2007-9-29 13:37 编辑 ]
r = ((arr-5)..arr) 根据临界值定义范围
+5,-5的情况是根据整除与否分的。。。慢慢理解吧
理解了 但是还有点问题 我变了下 最大的值和最小的值都要
这个简单的 max=r.max(+1)
但是有个新问题 如果 num 受限于 total_num 就是num肯定在total_num中
所以 arr=(num/6)*6.to_i 这个num改为total_num 即按总数分组
else
   r = (arr..(arr+5)) 这里的话 要判断 arr+5后是不是还在total_num内
(如果传入是num=22 total_num=22 那么输出就不该是19...24 而是19...22)
 r = (arr..(arr+arr%6)) (19..19+3)
max=r.max
但是会出错 请再帮忙看看 好象判断的逻辑有点问题。。