思路:
由图可以发现,每行的开头都是当前行数得平方,所以对每个数据开根号后向上取整可获得当前是哪行(哪列)
接下来就求具体的坐标
不难发现n–>每个数据开根号向上取整
n * n = 确定的行/列
n * n - k 确定从这一行开头开始,
n * n - k >= n 在n列的x行确定坐标,坐标为 n - (n * n-k - n) - 1, n
n * n - k < n 在n行的x列确定坐标 坐标为 n, (n * n - k) + 1
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <cmath> using namespace std; typedef long long LL; typedef pair<int, int>PII; int main() { int T; cin >> T; while (T--) { LL k; cin >> k; //ceil(sqrt(k))是行(列)号 LL n = ceil(sqrt(k)); LL r = 0, c = 0; //判断行还是列:n * n - k ? n //n * n - k表示在这行开头往右多了几个数 if (n * n - k >= n)//x行n列(多余n个数肯定就往上走了) { r = n - (n * n - k - n) - 1; c = n; } else//n行x列 { r = n; c = n * n - k + 1;//往右多的数少于n个,有n * n - k个 } cout << r << ‘ ‘ << c << endl; } return 0; }