您的位置:首页 > 其它

UVA 10161 Ant on a Chessboard

2016-07-13 15:32 465 查看

UVA-10161

题意:如样例所示将数字依序放入矩阵,求数字n放的坐标。

解题思路:通过while (k*k < n) k++;来获取n在哪一个L形外圈上。通过 (k,k)点的值( (k-1)^2 + k) 可以知道n处于L形外圈的那一部分( k奇数和偶数时两个是倒过来的)。然后计算出坐标。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int n;
int main () {
freopen("xx.in","r",stdin);
while (scanf("%d",&n) && n) {
int i,j,l,num;
double k=1;
while (k*k < n) k++;
l=k;
num=(l-1)*(l-1)+l;
if (l%2 == 0 ) {
if (num > n ){
j = l;
i = n - (num -l);
}else{
i = l;
j = l - (n - num);
}
}else {
if (num > n) {
i = l;
j = n - (num -l);
}else {
j = l;
i = l - (n - num);
}
}
printf("%d %d\n",i,j);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: