【蓝桥杯每日一练:黄金螺旋】

问题描述

有无穷多个正整数按照下图方式排列在坐标系中。

21  22  23  24  25  26

20   7   8   9  10  ...

19   6   1   2  11  ...

18   5   4   3  12  ...

17  16  15  14  13  ...

规定数字1的坐标是(0,0)。行的编号上往下依次增大,列的编号从左往右依次增大。比如24的坐标是(-2,1)。
现在给定一个数字N,请求出它的坐标(在第几行第几列)。

输入格式

输入一共有若干行,每行一个数字N(1 ≤ N<231),直到文件结束。

输出格式

对应每组数据有一行输出,对应数字N的坐标(行,列)。

输入样例

2
7

输出样例

(0,1)
(-1,-1)

代码

import math

while True:
    N=int(input())
    n=int(math.sqrt(N))
    if N!=1:
        if n%2==0:
            a=n-1
            b=n+1
        elif n%2==1:
            a=n
            b=n+2
        if n==math.sqrt(N) and n!=1:
            a=n-2
            b=n
        A=a//2
        B=b//2
        Error=N-a*a-1
        Bian=(b*b-a*a)/4
        c=Error%Bian
        d=Error//Bian
        if d==0:
            x=-A+c
            y=B
        elif d==1:
            x=B
            y=A-c
        elif d==2:
            x=A-c
            y=-B
        elif d==3:
            x=-B
            y=-A+c
    else:
        x=0
        y=0
    x=int(x)
    y=int(y)
    print("(%s,%s)"%(x,y))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zjf时空方程

感谢各位的支持,我一定会努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值