在回旋数中求具体数值的坐标..[已解决]
本帖最后由 t87564833 于 2011-1-14 10:17 编辑21 22 23 24 25 ……
20 07 08 09 10
19 06 01 02 11
18 05 04 03 12
17 16 15 14 13
这个是回旋数,
以01为中心。
像螺旋一样
01的坐标为(0,0)
求 2011的坐标是多少
{:face (207):} (0,0)=(0*2+1)^2=1
(1,1)=(1*2+1)^2=9
(2,2)=(2*2+1)^2=25
(3,3)=(3*2+1)^2=49
…………
(22,22)=(22*2+1)^2=2025
X轴回退14:(8,22) 打劫 打劫打劫打劫打劫打劫 楼上打劫什么?只要看这种题我一准晕、毫无悬念! 本帖最后由 pusofalse 于 2011-1-14 07:58 编辑
如果是求坐标值,2# tryhi兄的思路很强大。如果要输出具体的螺旋,用状态机很强大。
PS:很好的一个题目,就是标题不怎么样,改下标题吧。 - -||| 回复 4# gzh888666
跟我一样,{:face (411):} 很有意思的题目,先解决了这里的原始问题.
Local $iSafeLock = 0
If $iSafeLock = 1 And @Compiled = 0 Then
MsgBox(4096, "tips", "程序未编译,请谨慎执行!")
Exit
EndIf
FileChangeDir(@ScriptDir)
Local $Input
Local $aiResult ;计算结果
$Input = InputBox("趣味算法——螺旋数", "请输入要找位置的数值")
$aiResult = fn_Calc($Input)
MsgBox(4096, "", $aiResult & "," & $aiResult)
Exit
Func fn_Calc($Input)
;假设:螺旋数从数字1开始,数字1的坐标是(0,0)
;假设:螺旋数第一步为向正右方,由内向外顺时针旋转
Local $aiResult ;计算结果
Local $iRank = 0 ;螺旋数的阶数
Local $iWay ;控制方向
;计算输入的数值在螺旋数内的阶数
Do
$iRank += 1
Until $iRank^2 >= $Input
;计算螺旋数所在阶数范围内最大数值的坐标
If $iRank/2 <> Int($iRank/2) Then
$iWay = -1 ;奇数时,计算式方向为负
$aiResult = ($iRank-1)/2
$aiResult = ($iRank-1)/2
Else
$iWay = 1 ;偶数时,计算式方向为正
$aiResult = -1 * ($iRank/2 - 1)
$aiResult = -1 * ($iRank/2)
EndIf
;计算输入的数值在螺旋数内的坐标
$iDValue = $iRank^2 - $Input
If $iDValue <= ($iRank^2 - ($iRank - 1)^2)/2 Then
$aiResult += $iWay * $iDValue
Else
$aiResult += $iWay * $iRank - $iWay
$aiResult += $iWay * ($iDValue - $iRank) + $iWay
EndIf
Return($aiResult)
EndFunc
页:
[1]