1595-TomCat要吃饭 ZCMU

Description

TomCat 是一次单身Cat,但是他有着很多的基友,每次吃饭都会QQ他的某一只基友,然而,他的基友Jerry 总是很墨迹。等待是无聊的,这时TomCat在学校的地上乱走,这时他发现地上有方块铺成的,他按照下图的规律走,现在无聊的TomCat想知道,他如果走了n步,他应该在什么位置,位置用坐标(x,y)表示。

Input

每次输入一个数n,n=0是输入结束(n<=2*10^9)

Output

输出坐标(x,y)

Sample Input

8

20

25

0

Sample Output

2 3

5 4

1 5

解析

一道找规律的题。我们可以发现:

1.对角线上的数z等于x*(x-1)+1,用n去比较可以得出y=x-abs(n-z),n的位置就是(x,y)或(y,x),至于到底在哪,判断一下奇偶就知道了

2.能开平方的数不是在(1,sqrt(n))就是在(sqrt(n),1);当n是偶数的时候它的位置在(sqrt(n),1),当n是奇数的时候它的位置在(1,sqrt(n))

代码

#include<stdio.h>
#include<math.h>
int main()
{
    long long n,x,y,z;
    while(~scanf("%lld",&n)&&n)
    {
        x=sqrt(n);
        if(x*x==n)
        {
            if(x%2==1)
              printf("1 %lld",x);
            else
              printf("%lld 1",x);
        }
        else
        {
            x++; z=(x-1)*x+1;
            y=x-fabs(n-z);
            if(x%2==1)
            {
                if(n<z)
                  printf("%lld %lld",x,y);
                else
                  printf("%lld %lld",y,x);
            }
            else
            {
                if(n>z)
                  printf("%lld %lld",x,y);
                else
                  printf("%lld %lld",y,x);
            }
        }
       printf("\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ZCMU_2024/article/details/81208281