马猴烧酒1414 2019-04-27 09:18 采纳率: 0%
浏览 147

杭电1009 编译器能运行,却RE

#include
#include
using namespace std;
int find(double *p,double a[], double b[])
{
int i=0;
int m, n;
m = *(a + i), n = *(b + i);
while (*p != m / (n * 1.0))
{
i++;
m = *(a + i), n = *(b + i);
}
return i;
}
int main()
{
int m, n;
double *p, o[1000];
p = o;
while (cin >> m >> n)
{
double s=0;
if (m if (n == 0)
{
printf("%.3f\n", 0);
continue;
}
double j[1000], f[1000];
for (int i = 0; i {
int k = 0;
cin >> j[i-k] >> f[i-k];
if (f[i] == 0)
{
s += j[i];
k++;
}
else *(p+i-k) = j[i-k] / (f[i-k]*1.0);
}
sort(p, p + n);
while (m != 0)
{
int i;
if (n < 0) break;
i=find(p+n-1,j,f);
if (m >= f[i])
{
s += j[i];
m -= f[i];
}
else
{
s += j[i] * m / (f[i] * 1.0);
m = 0;
}
n--;
}
printf("%.3f\n", s);
}
}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 04:24
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码的目的是计算一个双精度浮点数列表中两个元素之间的距离。然而,在编译时出现了错误,并且我无法在不使用任何外部库的情况下解决它。

    find 函数使用了除法运算符 /, 这是 C++ 中的一个异常处理机制。在除以零的情况发生时,程序会抛出异常并退出执行。由于 find 函数在循环内调用,如果 i 等于 0 或者 *(a + i) 为 0(因为它们都是整型指针),则会发生除以零的错误。

    为了避免这种情况,可以将 find 函数改为非递归版本,或者修改循环条件来避免在 i 等于 0 或者 *(a + i) 为 0 的情况下进行除法操作。

    例如:

    double *p;
    using namespace std;
    
    int find(double *p, double a[], double b[]) {
        int i = 0;
        int m, n;
        m = *(a + i), n = *(b + i);
        while (*p != m / (n * 1.0)) {
            i++;
            m = *(a + i), n = *(b + i);
        }
        return i;
    }
    
    int main() {
        //...
    }
    

    这样,当遇到除以零的情况时,程序将立即停止执行,而不是继续执行 find 函数内的除法运算。

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab矩阵复数本征值排序
  • ¥15 skynet MySQL ProtocolBuffers
  • ¥15 浏览器关闭事件有时没执行怎么回事
  • ¥15 使用docker安装chemex后无法启动
  • ¥15 关于#vue.js#的问题:word excel和ppt预览问题语言-javascript)
  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流