範例程式碼 uva10161
//uva10161
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n = 1, i, idx, output_x, output_y, temp;
vector<int> num;
vector<int> mid;
num.push_back(0);
mid.push_back(0);
temp = 1;
for (i = 1; i * i <= 2e9; ++i) {
num.push_back(i * i);
mid.push_back(temp);
temp += 2 * i;
}
num.push_back(i * i);
mid.push_back(temp);
cin >> n;
while (n != 0) {
vector<int>::iterator it = lower_bound(num.begin(), num.end(), n);
idx = it - num.begin();
output_x = output_y = idx;
temp = n - mid[idx];
if (temp > 0) {
if (idx % 2 != 0)
output_x -= temp;
else
output_y -= temp;
}
else if (temp < 0) {
if (idx % 2 != 0)
output_y += temp;
else
output_x += temp;
}
cout << output_x << " " << output_y << endl;
cin >> n;
}
return 0;
}