UVA 10161 - Ant on a Chessboard

来源:互联网 发布:网络论坛的案例 编辑:程序博客网 时间:2024/05/16 03:56

大致题意:给你一个足够大的棋盘,从左下角开始编号为(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;}