三重问题:解决并消除错误

时间:2019-09-29 15:54:24

标签: c

Boolean

“删除浮点异常”
“这是黑客的问题”
'1.删除浮点异常
2.请快速帮助'
问题:为什么我会出现浮点异常,该如何解决?

1 个答案:

答案 0 :(得分:0)

if(1<=n<=100000)是错误的。在C语言中,这种方法行不通。我的建议是通过编写以下语句来使用逻辑和语句(&&):

if (1 <= n && n <= 100000)

您尝试将循环限制为n行:for(int i=0;i<=n;i++),但应使用<而不是<=的符号。尝试使用:for (int i=0; i<n; i++)将其限制为n

另外,当您将其限制为n时,则不应使用arr[i+1]arr[i+2],因为您正在访问数组边界之外的值(从刚访问完内存之后数组)。这是该异常的原因。如果您有一些非零的垃圾,那么您的代码很可能不会有浮点异常。因为您在模运算中使用arr[i+1]arr[i+2],并且在某种程度上它们可能为零,所以根据标准,您可以具有未定义的行为。

尝试使用(根据您的代码;我不知道它的用途):

long long good_triplets(int *arr, int n) {
  int count = 0;
  if (3 <= n && n <= 100000) {
    for (int i = 0; i < (n - 2); i++) {
      if ((((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i]) == 0) &&
          (((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 1]) != 0) &&
          (((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 2]) != 0))
        count = count + 6;
      if ((((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 1]) == 0) &&
          (((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i]) != 0) &&
          (((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 2]) != 0))
        count = count + 6;
      if ((((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 2]) == 0) &&
          (((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 1]) != 0) &&
          (((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i]) != 0))
        count = count + 6;
    }
  }
  return count;
}