t87564833 发表于 2011-1-13 12:46:58

在回旋数中求具体数值的坐标..[已解决]

本帖最后由 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):}

tryhi 发表于 2011-1-13 13:13:09

(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)

wuquitang 发表于 2011-1-13 13:19:14

打劫 打劫打劫打劫打劫打劫

gzh888666 发表于 2011-1-14 01:02:11

楼上打劫什么?只要看这种题我一准晕、毫无悬念!

pusofalse 发表于 2011-1-14 07:35:44

本帖最后由 pusofalse 于 2011-1-14 07:58 编辑

如果是求坐标值,2# tryhi兄的思路很强大。如果要输出具体的螺旋,用状态机很强大。
PS:很好的一个题目,就是标题不怎么样,改下标题吧。 - -|||

t87564833 发表于 2011-1-14 10:08:32

回复 4# gzh888666


    跟我一样,{:face (411):}

easied 发表于 2011-1-22 10:03:09

很有意思的题目,先解决了这里的原始问题.
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]
查看完整版本: 在回旋数中求具体数值的坐标..[已解决]