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