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;
}