大致题意:给你一个足够大的棋盘,从左下角开始编号为(1,1),一只蚂蚁从(1,1)开始,按照上,右,下,右,上上,左左,上。。。的方式移动,第移动一步的时间为1秒,最后给你一个时间,问你蚂蚁的坐标。
分析:到达棋盘主对角线上的各点时间是有规律的,计算在主对角线上的大致位置,然后沿着移动方向搜一下就行了
总结:利用一下主对角线上的时间增长规律就行了吧!
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n;
while (scanf("%d", &n), n != 0)
{
int t = 1;
int i = 2;
int x = 1, y = 1;
while (t < n)
{
t += i;
i += 2;
x++;
y++;
}
if (x % 2 == 0)
{
int flag = 0;
for (; x >= 1; x--)
{
if (t == n)
{
flag = 1;
break;
}
t--;
}
if (flag == 0)
{
x = 1;
y = y - 1;
while (t != n)
{
x++;
t--;
}
}
}
else
{
int flag = 0;
for (; y >= 1; y--)
{
if (t == n)
{
flag = 1;
break;
}
t--;
}
if (flag == 0)
{
y = 1;
x = x - 1;
while (t != n)
{
y++;
t--;
}
}
}
printf("%d %d\n", x, y);
}
return 0;
}