题目大意:按照图的方式排数,输入一个数,输出这个数的位置。
解题思路:斜对角线有规律,其位置的坐标为奇数时往左变大,往下变小,偶数时往左变小,往下变大。来输出,因为范围比较大,所以要100000。
ac代码:
#include <iostream>
using namespace std;
int a[100005]={0, 1, 3}, goal;
int main()
{
for (int i=3, n=4; i<100005; i++,n+=2)
a[i] = a[i-1] + n;
while (scanf("%d", &goal)!=EOF && goal){
for (int i=1; i<100005; i++)
if (goal > a[i]-i && goal < a[i]+i){
if (i % 2)
if (goal > a[i]-i && goal <= a[i])
printf("%d %d\n", i, i-(a[i]-goal));
else
printf("%d %d\n", i-(goal-a[i]), i);
else
if (goal > a[i]-i && goal <= a[i])
printf("%d %d\n", i-(a[i]-goal), i);
else
printf("%d %d\n", i, i-(goal-a[i]));
break;
}
}
return 0;
}