You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:20:45