我需要帮助编写一个程序,该程序以(X,Y)形式给出指定数量的坐标点。将给出的分数是该计划的第一行;它可以通过扫描仪读入。
我需要用x = a和y = b来计算覆盖所有点的最小面积。因此,该区域将是* b(矩形区域)。
但是,必须删除一个坐标点(X,Y)以优化该区域。被移除的点应尽可能地减小区域。我需要帮助编写算法才能这样做。
这是一个示例输入,我得到的输出::
SAMPLE INPUT
4
2 4
1 1
5 2
17 25
SAMPLE OUTPUT
12
在此示例中,输入的第一行(4)表示将输入四个点。接下来的四行是形式(x,y)的坐标。最后一点是(17,25)被移除作为离群值,留下前三个点。
如果剩下的三个点都是图形,它们都可以在一个方框内(3乘4),因此输出为12; (3 * 4)。这条线就像在这个例子中那样可以。然而,异常值并不总是最后一点,或者非常大。异常值可能非常小,该区域只需要最小化。
- 这是我到目前为止(我知道它不是很多......) - 请帮助我!
这主要是我需要帮助的算法..
import java.io.*;
import java.util.*;
public class Area {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int numOfPoints = scan.nextInt();
int Xcoordinates[] = new int[numOfPoints];
int Ycoordinates[] = new int[numOfPoints];
for (int i = 0; i <= numOfCows - 1; i++) {
Xcoordinates[i] = scan.nextInt();
Ycoordinates[i] = scan.nextInt();
}
}
}
可能的伪代码(从上面继续;这可能是错误的......):
for (int i = 0; i <= Xcoordinates.length; i++) { //loop through array
compare values, and determine outlier
int lowestXValue = [find lowest x value]
int highestXValue = [find highest x value; not outlier] }
remove xcoordinates[outlier]
remove ycoordinates[outlier]
int xLength = highestXValue - lowestXValue - 1 // -1 because can be on line
for (int i = 0; i <= Ycoordinates.length; i++) { //loop through y array
int lowestYValue = [find lowest y value]
int highestYValue = [find highesy Y value] }
int yLength = highestYValue - lowestYValue - 1;
int boxArea = yLength * xLength
System.out.println(boxArea);
然而,这只会搜索可能的X异常值,如果有一个Y值可以通过删除来最小化区域,那么它就不会捕获
答案 0 :(得分:0)
我会创建两个整数排序列表,一个用于x co-ords,另一个用于y co-ords。然后,您可以通过删除max x坐标来检查保存的区域(保存的区域应该是最大坐标时间(最大x坐标 - 第二高x坐标))。您可以通过删除最大坐标来检查保存的区域,并以最大的答案为准。