如何在不使用数组的情况下存储输入?
How can i store the input without using array?
为一组输入几何计算最小尺寸 AABB 所需的问题。
下面列出了几何类型:
- 矩形,center_x,center_y,宽度,高度:R x y w h
- 圆,center_x,center_y,半径:C x y r
- 点集,点数,x_1, y_1 , ... , x_n , y_n : P n x_1 y_1 ... x_n y_n
- # :表示输入结束
示例案例如下:
输入:
R 0 0 3 2
#
输出:
0 0 3 2
输入:
P 2 3 -2 -1 4
C -0.5 3.2 1.6
P 3 -1.5 3 3 3 5 3
R 0 0 3 2
#
输出:
1.45 1.4 7.1 6.8
我想知道示例案例二运行,因为有多个输入,我该如何构建我的AABB?但是,如何避免变量被替换的情况呢?
例如,
R 0 0 3 2
R 1 2 4 5
我只是不知道如何避免替换 center_x、center_y、w 和 h。
下面是我的代码,
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int times, i;
char geo;
double center_x, center_y, w, h, r;
double box_LX = 0, box_RX = 0, box_DY = 0, box_UY = 0;
bool end;
end = false;
double LX, RX, UY, DY;
while (!end) {
cin >> geo;
if (geo == 'R') {
cin >> center_x >> center_y >> w >> h;
LX = (center_x - w / 2);
RX = (center_x + w / 2);
DY = (center_y - h / 2);
UY = (center_y + h / 2);
if (RX > box_RX)
box_RX = RX;
if (LX < box_LX)
box_LX = LX;
if (UY > box_UY)
box_UY = UY;
if (DY < box_DY)
box_DY = DY;
}
if (geo == 'C') {
cin >> center_x >> center_y >> r;
if (box_RX < (center_x + r))
box_RX = center_x + r;
if (box_LX > (center_x - r))
box_LX = center_x - r;
if (box_UY < (center_y + r))
box_UY = center_y + r;
if (box_DY < (center_y - r))
box_DY = center_y - r;
}
if (geo == 'P') {
cin >> times;
i = 0;
while (i != times) {
cin >> center_x >> center_y;
if (box_RX < center_x)
box_RX = center_x;
if (box_LX > center_x)
box_LX = center_x;
if (box_UY < center_y)
box_UY = center_y;
if (box_DY > center_y)
box_DY = center_y;
i++;
}
}
if (geo == '#') {
cout << (box_LX+box_RX)/2 << " " << (box_DY+box_UY)/2 << " " << abs(box_LX - box_RX) << " " << abs(box_UY - box_DY) << endl;
end = true;
}
}
return 0;
}
非常感谢!!
为此您不需要数组。作为一个类比,假设您正在尝试从整数列表中找到最小整数(这与您正在做的类似,但在一维而不是二维)。跟踪最小值所需要做的就是
- 所有先前值的当前最小值 (
current
),并且
- 下一个值(
value
)。
根据这两个值,您可以计算下一个最小值 - min(current, value)
,然后获取下一个值,再次计算最小值,依此类推。在输入结束时打印出current
。在任何时候您都不需要一次存储 所有 个值。
对于您的问题,请将 current
替换为当前最小尺寸的 AABB,将 value
替换为下一个形状,并将 min
替换为 returns 最小尺寸的函数- 大小的 AABB,包含两种形状。
在此图像中,您有 2 个先前的形状(2 个黑框)、当前最小值(灰色框)、下一个形状(蓝色圆圈)和下一个最小值(红色框)需要计算,里面既有灰框,也有蓝圈。
为一组输入几何计算最小尺寸 AABB 所需的问题。
下面列出了几何类型:
- 矩形,center_x,center_y,宽度,高度:R x y w h
- 圆,center_x,center_y,半径:C x y r
- 点集,点数,x_1, y_1 , ... , x_n , y_n : P n x_1 y_1 ... x_n y_n
- # :表示输入结束
示例案例如下:
输入:
R 0 0 3 2
#
输出:
0 0 3 2
输入:
P 2 3 -2 -1 4
C -0.5 3.2 1.6
P 3 -1.5 3 3 3 5 3
R 0 0 3 2
#
输出:
1.45 1.4 7.1 6.8
我想知道示例案例二运行,因为有多个输入,我该如何构建我的AABB?但是,如何避免变量被替换的情况呢?
例如,
R 0 0 3 2
R 1 2 4 5
我只是不知道如何避免替换 center_x、center_y、w 和 h。
下面是我的代码,
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int times, i;
char geo;
double center_x, center_y, w, h, r;
double box_LX = 0, box_RX = 0, box_DY = 0, box_UY = 0;
bool end;
end = false;
double LX, RX, UY, DY;
while (!end) {
cin >> geo;
if (geo == 'R') {
cin >> center_x >> center_y >> w >> h;
LX = (center_x - w / 2);
RX = (center_x + w / 2);
DY = (center_y - h / 2);
UY = (center_y + h / 2);
if (RX > box_RX)
box_RX = RX;
if (LX < box_LX)
box_LX = LX;
if (UY > box_UY)
box_UY = UY;
if (DY < box_DY)
box_DY = DY;
}
if (geo == 'C') {
cin >> center_x >> center_y >> r;
if (box_RX < (center_x + r))
box_RX = center_x + r;
if (box_LX > (center_x - r))
box_LX = center_x - r;
if (box_UY < (center_y + r))
box_UY = center_y + r;
if (box_DY < (center_y - r))
box_DY = center_y - r;
}
if (geo == 'P') {
cin >> times;
i = 0;
while (i != times) {
cin >> center_x >> center_y;
if (box_RX < center_x)
box_RX = center_x;
if (box_LX > center_x)
box_LX = center_x;
if (box_UY < center_y)
box_UY = center_y;
if (box_DY > center_y)
box_DY = center_y;
i++;
}
}
if (geo == '#') {
cout << (box_LX+box_RX)/2 << " " << (box_DY+box_UY)/2 << " " << abs(box_LX - box_RX) << " " << abs(box_UY - box_DY) << endl;
end = true;
}
}
return 0;
}
非常感谢!!
为此您不需要数组。作为一个类比,假设您正在尝试从整数列表中找到最小整数(这与您正在做的类似,但在一维而不是二维)。跟踪最小值所需要做的就是
- 所有先前值的当前最小值 (
current
),并且 - 下一个值(
value
)。
根据这两个值,您可以计算下一个最小值 - min(current, value)
,然后获取下一个值,再次计算最小值,依此类推。在输入结束时打印出current
。在任何时候您都不需要一次存储 所有 个值。
对于您的问题,请将 current
替换为当前最小尺寸的 AABB,将 value
替换为下一个形状,并将 min
替换为 returns 最小尺寸的函数- 大小的 AABB,包含两种形状。
在此图像中,您有 2 个先前的形状(2 个黑框)、当前最小值(灰色框)、下一个形状(蓝色圆圈)和下一个最小值(红色框)需要计算,里面既有灰框,也有蓝圈。