如何在C语言程序无解决方案时输出"No Output"?
修改方案说明
核心问题分析
原程序存在两个关键问题:
- 浮点数
0.1无法在二进制中精确表示,导致5*x+2*y+0.1*z==120的判断会出现精度误差,可能漏掉正确解或误判。 - 没有设置“无解决方案”的判断逻辑,无输出时没有对应提示。
修改后的代码
#include <stdio.h> int main() { int x, y, z, n; int found = 0; // 标记是否找到有效解 scanf("%d", &n); // 优化循环范围:x最大为24(50*24=1200),无需遍历到n for(x = 0; x <= 24; x++) { // y的最大取值由50x+20y <=1200推导而来 for(y = 0; y <= (1200 - 50*x)/20; y++) { z = n - x - y; // 同时满足z非负、整数方程条件 if(z >= 0 && 50*x + 20*y + z == 1200) { printf("%d,%d,%d\n", x, y, z); found = 1; } } } // 无有效解时输出提示 if(!found) { printf("No Output\n"); } return 0; }
关键修改点
- 替换浮点数运算:将原等式
5*x+2*y+0.1*z==120两边乘以10,转换为整数运算50*x +20*y +z ==1200,彻底避免浮点数精度误差。 - 添加解存在标记:用
found变量记录是否找到有效解,循环结束后根据标记判断是否输出"No Output"。 - 优化循环效率:根据方程约束缩小x和y的循环范围,直接通过
z = n -x -y计算z的值,去掉不必要的第三层循环,大幅提升程序运行速度(尤其是n很大时)。
内容的提问来源于stack exchange,提问作者123krikit krukut
相关产品推荐
相关产品推荐

