给出一定范围的数字(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循环),因此可以检查哪些值可以通过条件。
不确定确切的问题是什么。我将范围存储在数组中:
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));