我的代码是这样的:
if (x[b] != x[c] && x[a] != x[b])
{
if(x[a] != x[b] != x[c] != x[d])
{
if(y[a] != y[b] != y[c] != y[d])
{
int m = (y[a] - y[b])/(x[a] - x[b]);
int b = y[a] - x[a] * m;
if((y[c] - x[c]*m > b && y[d] - x[d]*m > b)|| (y[c] - x[c]*m < b && y[d] - x[d]*m < b)){
m = (y[b] - y[c])/(x[b] - x[c]);
b = y[b] - x[b] * m;
if((y[a] - x[a]*m > b && y[d] - x[d]*m > b)|| (y[a] - x[a]*m < b && y[d] - x[d]*m < b))
{
int xx[4];
int yy[4];
xx[0] = x[a];
xx[1] = x[b];
xx[2] = x[c];
xx[3] = x[d];
yy[0] = y[a];
yy[1] = y[b];
yy[2] = y[c];
yy[3] = y[d];
if(c == 1)
{
c = 0;
pt = povrsina(xx, yy);
pc = p - pt;
}
pv = povrsina(xx, yy);
pr = p - pv;
if(pr < pc)
{
pc = pr;
pt = pv;
}
else if(pr == pc)
{
pt = max(pt, pv);
}
}
}
}
}
}
我尝试的输入是:
5
30
0 0
10 0
0 10
10 10
7 3
我的程序在第174行中遇到了Division by zero
的错误代码:
m = (y[b] - y[c])/(x[b] - x[c]);
所以我添加了第一个if
语句检查
if x[b] != x[c]
但由于某些原因它仍然因相同的错误代码而在同一行中崩溃。
答案 0 :(得分:0)
以下情况正常。
int n = 0;
double p = 0;
scanf("%d\n%lf", &n, &p);
int *x = (int *) malloc(sizeof(int) * n);
int *y = (int *) malloc(sizeof(int) * n);
for(int i = 0; i < n; i++){
scanf("%d %d", &x[i], &y[i]);
}
for(int i = 0; i < n; i++){
printf("%d %d\n", x[i], y[i]);
}
请参阅demo。
更新
由于以下行,您的代码崩溃了。
int m = (y[a] - y[b])/(x[a] - x[b]);
如果a, b, c, d
的值是0, 2, 3, 4
,那么分母词(x[a] - x[b])
代表(x[0] - x[2])
等于零,对吧?因为第1和第3个输入是0 0
和0 10
。
如果将值除以零,则会变为无穷大,此时程序将崩溃。 在使用除法运算编写语句时,请确保除数不为零。