找回密码
 加入
搜索
查看: 4608|回复: 6

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

  [复制链接]
发表于 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的坐标是多少
发表于 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)

评分

参与人数 1金钱 +30 收起 理由
pusofalse + 30 学习了。

查看全部评分

发表于 2011-1-13 13:19:14 | 显示全部楼层
打劫 打劫打劫打劫打劫打劫

评分

参与人数 1金钱 -40 收起 理由
pusofalse -40

查看全部评分

发表于 2011-1-14 01:02:11 | 显示全部楼层
楼上打劫什么?只要看这种题我一准晕、毫无悬念!
发表于 2011-1-14 07:35:44 | 显示全部楼层
本帖最后由 pusofalse 于 2011-1-14 07:58 编辑

如果是求坐标值,2# tryhi兄的思路很强大。如果要输出具体的螺旋,用状态机很强大。
PS:很好的一个题目,就是标题不怎么样,改下标题吧。 - -|||
 楼主| 发表于 2011-1-14 10:08:32 | 显示全部楼层
回复 4# gzh888666


    跟我一样,
发表于 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[2]                ;计算结果
$Input = InputBox("趣味算法——螺旋数", "请输入要找位置的数值")

$aiResult = fn_Calc($Input)
MsgBox(4096, "", $aiResult[0] & "," & $aiResult[1])
Exit

Func fn_Calc($Input)
        ;假设:螺旋数从数字1开始,数字1的坐标是(0,0)
        ;假设:螺旋数第一步为向正右方,由内向外顺时针旋转
        
        Local $aiResult[2]                ;计算结果
        Local $iRank = 0                ;螺旋数的阶数
        Local $iWay                                ;控制方向
        ;计算输入的数值在螺旋数内的阶数
        Do
                $iRank += 1
        Until $iRank^2 >= $Input
        ;计算螺旋数所在阶数范围内最大数值的坐标
        If $iRank/2 <> Int($iRank/2) Then
                $iWay = -1                ;奇数时,计算式方向为负
                $aiResult[0] = ($iRank-1)/2
                $aiResult[1] = ($iRank-1)/2
        Else
                $iWay = 1                ;偶数时,计算式方向为正
                $aiResult[0] = -1 * ($iRank/2 - 1)
                $aiResult[1] = -1 * ($iRank/2)
        EndIf
        ;计算输入的数值在螺旋数内的坐标
        $iDValue = $iRank^2 - $Input
        If $iDValue <= ($iRank^2 - ($iRank - 1)^2)/2 Then
                $aiResult[0] += $iWay * $iDValue
        Else
                $aiResult[0] += $iWay * $iRank - $iWay
                $aiResult[1] += $iWay * ($iDValue - $iRank) + $iWay
        EndIf
        Return($aiResult)
EndFunc

评分

参与人数 1威望 +5 金钱 +25 贡献 +5 收起 理由
pusofalse + 5 + 25 + 5

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-4 19:28 , Processed in 0.077647 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表