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
通过观察我们很容易发现这样一串数是呈蛇形向外延伸的
因为数字很大所以我们不太可能把整个数组输出,所以这个时候就要开始找规律了
通过观察我们不难发现,沿对角线的数字都等于前一个数字加上两倍的他的行数
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n&&n!=0)
{
if(n==1)
printf("1 1");
else
{
int i,a=1;
for( i=1;;i++)
{
a+=2*i;
if(a>n)
break;
}
// printf("%d %d\n",i,a);
if(i%2==0)
//比a大的在它左边,比a大的在它下面
{
if(n<(a-i))
printf("%d %d\n",i,(a-n-i));
else
printf("%d %d\n",i+1,(i+1+n-a));
}
else
//比a大的在它下边,比a大的在它左面
{
if(n<a-i)
printf("%d %d\n",(a-n-i),i);
else
printf("%d %d\n",i+1-a+n,i+1);
}
}
}
return 0;
}