解决 了@Jeff 和@Eric,非常感谢。最后,我必须对 Eric 的解决方案稍作改动。
for(; i+4<=n; i+=4)
这就是我将如何使用它:
function findRange(n,div)
{
var odd =1&n;
var i = 0;
var ranges = [];
for(; i + div<= n; i+=div)
{
ranges.push([i+1, i+div]); // in array 1-4 / 5-8 etc
// or in side cases the 2nd part of the array contains the remainder
ranges.push([i+1, n]); // 1-16,5-16,9-16,etc
ranges.push([i+div, n]); // 4-16,8-16,12-16,etc
if(odd === 1)
{
ranges.push([i+div+1, n]); // in case of input 7 creates array 5-7
}
}
return ranges;
}
console.log(findRange(16,4));
该解决方案回答了以下问题
问题 1:
如何从数字 16 创建范围(1-4、5-8、9-12、13-16)
问题 4:
如何找到该范围内的第一个和最后一个数字(1 和 4、5 和 8 等)
问题 2:
如何处理输入数字为例如 17 的情况。这将给出这些范围 1-4、5-8、9-12、13-16 和剩余数字 17。
下面的原始问题。
我需要知道如何从单个数字创建一个范围,其中单个数字是可变的。范围始终需要落在 4 个位置内。每个范围我需要知道第一个和最后一个数字。每个范围我需要知道两者之间的数字。
例如:单个(输入)数字是 16,它给出了以下 4 个范围 4(1-4、5-8、9-12、13-16)。
问题 1:
如何从数字 16 创建范围(1-4、5-8、9-12、13-16)
问题 2:
如何处理输入数字为例如 17 的情况。这将给出这些范围 1-4、5-8、9-12、13-16 和剩余数字 17。
问题3:
输入数字为3所以范围为1-3的情况如何处理
下面的问题是可选的,因为这些答案可能会在堆栈中找到。
问题 4:
如何找到该范围内的第一个和最后一个数字(1 和 4、5 和 8 等)
问题 5:
如何在每个范围内查找范围内的数字(范围 1:1、2、3、4 | range2:5、6、7、8 等)。
我还没有真正尝试过任何事情,因为根本不知道如何迈出第一步。
我尝试过的一件事是使用 % (模数),但这不是答案。我试过这个:
var x=16;
for(var i=0; i<=x; i++)
{
for(i % 4 === 0)
{
return i;
}
}
它给了我 4,8,12,16,这很好,但与我想要的相去甚远。我已经厌倦了为此烦恼。我很好奇这个问题的解决方案是什么。
我不确定是否允许以这种方式提问。但由于它们都与范围有关,我认为最好尽可能具体地说明我正在寻找的内容。