这道算法题怎么做?

来源:百度知道 编辑:UC知道 时间:2024/07/08 00:09:09
1 5 7 19
3 9 17
11 15
13

问2009在多少行多少列

1 5 7 19 21 41 43
3 9 17 23 39 45
11 15 25 37 47
13 27 35 49
29 33 51
31 53
55

我们这样表示行列吧(列,行)
从此可见 1,9,25,49在斜线上位置是 ((根号(n)+1)/2,(根号(n)+1)/2 )

45的平方是2025,就是说45在(23,23)

通过观察可见,从斜线上的数开始,向右上方走数越小。

那么,(2025-2009)/2 = 8

向右上方走8各,2009就在(23+8,23-8)=(31,15)

15行,31列

用C++做的话
int n = 1;
int row = 1, col = 1;
bool directionDown = false;
while(true)
{
if( n == 2009)
break;

//如果在向下走
if(directionDown)
{
//如果走到了第一列,向下一行,改变方向向上
if(col == 1)
{
directionDown = !directionDown;
row++;
}
//向下一行,向做一列
else
{
row++;
col--;
}
}

//如果在向上走
if(!directionDown)
{
//如果走到第一行,向右一列,改变方向向下
if(row == 1)
{
directionDown = !directionDown;
col++;
}
//向右一列,向上一行