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

C语言11x+15y=c线性组合判断程序输出不符问题排查

问题排查与修正

首先明确核心问题:整数12无法表示为11x + 15y(x、y为非负整数)——试遍所有可能的非负y值:

  • y=0时,11x=12,x不是整数
  • y≥1时,15y≥15>12,剩余值为负数,x必然为负,不符合要求

你的程序输出YES,说明逻辑存在以下常见问题之一:


常见错误类型

  1. 循环未限制变量范围:遍历y时未在15y > c时终止循环,导致后续计算负数剩余值,错误判定整除性
  2. 判断条件不完整:只检查剩余值能否被另一个系数整除,未确认剩余值非负(允许x/y为负数)
  3. 错误的简化逻辑:比如误以为c >= 11或c >=15就直接返回YES,忽略了小数值的特殊情况

修正后的代码

以下是符合要求的实现,逻辑为遍历所有合法的y值(非负且15y ≤ c),检查剩余值是否为非负且能被11整除:

#include <stdio.h>

int main() {
    int c;
    // 处理5个测试用例
    for (int i = 0; i < 5; i++) {
        scanf("%d", &c);
        int is_possible = 0;
        // y的最大取值为c/15(整数除法,确保15y ≤ c)
        for (int y = 0; y <= c / 15; y++) {
            int remainder = c - 15 * y;
            // 剩余值非负 + 能被11整除,才存在合法x
            if (remainder >= 0 && remainder % 11 == 0) {
                is_possible = 1;
                break;
            }
        }
        printf("%s\n", is_possible ? "YES" : "NO");
    }
    return 0;
}

运行结果

输入测试用例89、234、876、99、12时,输出为:

YES
YES
YES
YES
NO

额外说明

根据数论中的贝祖定理,由于11和15互质,所有大于等于149(即11*15 -11 -15)的整数都可以表示为11x+15y(x、y非负),但小于149的数需要逐个验证,比如12就属于无法表示的范围。

内容的提问来源于stack exchange,提问作者Shark Hiuu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:26:27