数学题
按照[i^2 + 1, (i + 1)^2]进行分区间讨论,i为odd或者even的时候分别往右或者往上走,最大不超过坐标(i+1, i+1)
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <deque>
#include <map>
using namespace std;
///
#define INF 0xffffff7
#define MAXN 200
///
int main()
{
///
int i, j;
int stpes;
int startrow, startcol;
int dif;
while (1)
{
cin >> stpes;
if (stpes == 0)
break;
if (stpes == 1)
cout << 1 << " " << 1 << endl;
else
{
i = 0;
while (1)
{
if ( ( (i * i + 1) <= stpes) && (stpes <= (i + 1) * (i + 1) ) )
break;
i++;
}
if (i % 2 != 0)
{
startrow = i + 1;
startcol = 1;
dif = stpes - i * i - 1;
while ((startcol < i + 1) && (dif > 0))
{
startcol++;
dif--;
}
startrow -= dif;
}
else
{
startrow = 1;
startcol = i + 1;
dif = stpes - i * i - 1;
while ( (startrow < i + 1) && (dif > 0))
{
startrow++;
dif--;
}
startcol -= dif;
}
cout << startcol << " " << startrow << endl;
}
}
///
return 0;
}