统计乘积等于给定值的三元组数量的C程序不输出count值的原因?
问题原因及修复方案
你的程序无法输出统计结果的核心原因是第二层循环的终止条件书写错误,导致程序进入死循环,永远无法执行到最后的打印语句。
具体错误点
- 原代码第二层循环为
for(int j=i+1;i<n-1;j++),终止条件错误使用了变量i做判断,而i在第二层循环内部不会被修改,只要初始满足i < n-1的条件,循环就会无限执行,不会退出。 - 变量定义行存在多余分号:
int n,m,count=0;;,虽不影响运行但属于不规范写法。 - 三个int类型值相乘存在溢出风险:如果数组元素数值较大,乘积可能超出int的取值范围,导致相等判断结果错误。
- main函数缺少返回值,属于不规范写法。
修复后代码
#include<stdio.h> #include<stdlib.h> int main() { int n,m,count=0; scanf("%d",&n); int arr[n]; for(int i=0;i<n;i++) scanf("%d",&arr[i]); scanf("%d",&m); for(int i=0;i<n-2;i++) // 修正第二层循环终止条件为j < n-1 for(int j=i+1;j<n-1;j++) for(int k=j+1;k<n;k++) // 强制转为long long计算乘积,避免溢出 if((long long)arr[i] * arr[j] * arr[k] == m) count++; printf("%d",count); return 0; }
内容的提问来源于stack exchange,提问作者Yashaswi
相关产品推荐
相关产品推荐

