获取总和为 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Linq查询以获取最多为N的所有数字(正数和负数),总和为数字K

java校验银行卡号

获取总和为X的数组的数字列表[重复]

最大化所有可能子数组的特定总和

带有 2675 个数字列表的子集总和

获取JAVA中的数字总和