获取总和为 11 的所有 3 位数字,或者我们可以说模块在 JS 中为 1 [关闭]
Posted
技术标签:
【中文标题】获取总和为 11 的所有 3 位数字,或者我们可以说模块在 JS 中为 1 [关闭]【英文标题】:get all 3 digit number whose sum is 11 or we can say module is 1 in JS [closed] 【发布时间】:2020-12-30 22:29:46 【问题描述】:作为回应,我想要总和为 11 的所有 3 位数字,并且还给出模块 1 和 也想知道如何在js中将000推入数组中。
例如 number = 128, sum = 11 和 module(remainder) = 1。 像这样我想要数组中的所有数字。 任何人都可以分享相同的逻辑。
提前感谢。
【问题讨论】:
你需要先自己尝试一下。 你如何得到模一? 你的意思是1%2%8
...?
那个数字的和必须是11,如上例1+2+8=11,11%10=1。
11%10
始终是 1
那么需要什么检查?
【参考方案1】:
我不确定第二次检查应该是什么(某物的模数必须是1
)。如果这应该是数字的所有数字的模数必须是1
,那么您可以这样做:
var results = [];
for (let i = 1; i < 10; i++)
for (let j = 0; j < 10; j++)
for (let k = 0; k < 10; k++)
if (i + j + k === 11 && i % j % k === 1)
results.push(i.toString() + j.toString() + k.toString());
console.log(results);
或者:
var results = [];
for (let i = 100; i < 1000; i++)
const [one, two, three] = i.toString().split('').map(i => +i);
if (one + two + three === 11 && one % two % three === 1)
results.push(i.toString());
console.log(results);
基本上只是检查所有可能的组合并检查每个数字。
【讨论】:
【参考方案2】:您可以采取蛮力方法并检查总和与 11。不需要检查余数,因为11
如果除以 1,则总是余数。
const
getSum = v => [...v.toString()].reduce((a, b) => a + +b, 0),
values = [];
for (let i = 1; i < 1000; i++)
if (getSum(i) === 11) values.push(i);
console.log(values);
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
我认为您需要在100
开始循环,因为它说 所有 3 位数字
不像,这个,因为我提到那个数字的总和必须是11,如上例1+2+8=11,11%10=1。
@Nileshsolanki,为什么剩下一个?
@NinaScholz 想在我的一个应用中实现那个东西。【参考方案3】:
这是你想要的吗?
var arr=[1,128,15];
var remainder = 127;
var result = arr.filter(function(i)
var str=i.toString().split('');
var sum=0;
str.forEach(function(c) return sum+=Number(c); );
return sum===11 && (i%remainder)===1;
);
还有更多花哨的 ES6:
const arr=[1,128,15];
const remainder = 127;
const result = arr.filter(i=>
const sum=i.toString().split('').reduce((s,v)=>(+v)+s,0);
return sum===11 && (i%remainder)===1;
);
【讨论】:
以上是关于获取总和为 11 的所有 3 位数字,或者我们可以说模块在 JS 中为 1 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章