题意:

从(1,1)点出发,逆时针,然后顺时针,一直循环绕矩阵,求给出的数字的坐标是多少。

思路:

暴力肯定是不行了,没有那么大的数组,所以只能找规律。注意到偶数行,奇数列的起始都是坐标的平方,这样通过计算与这些特殊点的距离,就可以计算出点的坐标。

#include<iostream>
#include<cmath>
#define eps 1e-6
using namespace std;
int main(){
int n, m;
while(scanf("%d",&n)&&n){
m=pow(n,0.5)+eps;
// cout<<m<<endl;
if(m*m==n) {
if(m%2) printf("%d %d\n",1,m);
else printf("%d %d\n",m,1);
}
else{
int te=n-m*m;
if(m%2){
if(te<=m) printf("%d %d\n",te,m+1);
else printf("%d %d\n",m+1,(m+1)*(m+1)-n+1);
}
else{
if(te<=m) printf("%d %d\n",m+1,te);
else printf("%d %d\n",(m+1)*(m+1)-n+1,m+1);
}
}
}

return 0;
}