已知2*a + 3*b +4*c =1000,求a、b、c的值

发布于 2022-09-12 02:41:43 字数 218 浏览 19 评论 0

如题就是举个例子:
已知2*a + 3*b +4*c =1000,求a、b、c的值。
2、3、4、1000可能是任意其他数。

实际的需求是:
怎么把一个大数(例如:1000)分解为3个(或N个)小数字(2、3、4)各自乘一个自然数的积 的和。

这个问题我都不知道要怎么问百度……实际情况数字可能比较大,也不是3个小数字,用for遍历太慢了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

遗失的美好 2022-09-19 02:41:43

这感觉就是三个for然后控制一下边界情况。应该不存在啥偷懒的情况。

穿透光 2022-09-19 02:41:43

我整理下你的问题:

$$
ax+by+cz=L,其中 a,b,c,x,y,z,L>=0,且是整数。在随机给定 a,b,c,L 的值后,请用编程解出合理的 x,y,z 的值,题目保证给定的随机值有解。
$$

我突然发现这是三维下的一条直线,那么问题就转化为这条直线是否经过坐标都是 0 或正整数的点。

高冷爸爸 2022-09-19 02:41:43

这是个复杂的整数分解问题,目前尚无快速算法。不过,比起 for 遍历,有其它更高效的算法。

参考
https://zh.wikipedia.org/wiki...

完美的未来在梦里 2022-09-19 02:41:43

也考虑负数?

眼波传意 2022-09-19 02:41:43
const fun = (total, ...params) => {
  const count = params.reduce((a, b) => a + b),
    average = Math.floor(total / count),
    other = total - (count * average),
    result = params.map(v => `${v} * ${average}`);
  return `${result.join(' + ')} = ${total}${other ? ` - ${other}` : ''}`;
};

fun(1000, 2, 3, 3); // "2 * 125 + 3 * 125 + 3 * 125 = 1000"
fun(1000, 2, 3, 4); // "2 * 111 + 3 * 111 + 4 * 111 = 1000 - 1"

偷个巧 不能被参数和整除的other处理起来比较麻烦 留坑

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文