将数字范围的每种可能组合分配给变量

问题描述 投票:0回答:1

给出一定范围的数字(1-25),如何创建循环,以便在每次迭代时获得唯一的变量集。

举个例子,如果我用4个数字来做,我的变量将是:循环1:

a = 1,b = 2,c = 3,d = 4,

循环2:

a = 1,b = 2,c = 4,d = 3

我想做的是遍历每个位置的每个可能的数字(想想数独)因此在3x3网格中:a =左上角位置,b =中间上角,依此类推...

类似于数独,我会有一个条件(每行= 65:a + b + c + d + e = 65)

所以我想做的是一个循环,我可以在其中将所有值分配给变量:

for (something) {
   var topLeft = (determined from loop)
   var nextPosition = etc.

我的解决方案目前是这样的:


var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
var a,b,c,d,e,f,g,h,i,j,k,l,n,o,p,q,r,s,t,u,v,w,x,y;
var vars = [a,b,c,d,e,f,g,h,i,j,k,l,n,o,p,q,r,s,t,u,v,w,x,y];
var counter = 0;
var found = false;
while(found == false) {
for (var asdf = numbers, i = asdf.length; i--; ) {
    var random = asdf.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
    vars[i] = random;
}
if (
    {a+b+c+d+e = 65,
    f+g+h+i+j = 65,
    k+l+1+n+o = 65,
    p+q+r+s+t = 65,
    u+v+w+x+y = 65,
    a+f+k+p+u = 65,
    b+g+l+q+v = 65,
    c+h+1+r+w = 65,
    d+i+n+s+x = 65,
    e+j+o+t+y = 65,
    u+q+1+i+e = 65,
    a+g+1+s+y = 65}
) {
    console.log(a,b,c,d,e,f,g,h,i,j,k,l,n,o,p,q,r,s,t,u,v,w,x,y);
    found = true;
}
counter++;
}

然而,明显的问题是它只是随机选择值。因此,这将花费大量时间。我无法解决如何遍历每种可能的组合(没有25个for循环),因此可以检查哪些值可以通过条件。

javascript permutation
1个回答
0
投票

不确定确切的问题是什么。我将范围存储在数组中:

function range(start, stop = null){
  let b = start, e = stop; 
  if(e === null){
    e = b; b = 1;
  }
  const a = [];
  for(let i=b; i<=e; i++){
    a.push(i);
  }
  return a;
}
console.log(range(2, 23)); console.log(range(10));
© www.soinside.com 2019 - 2024. All rights reserved.