以值的倍数插入数组,其中值在数组传递之间递增
Insert into array at multiples of a value, where value increments in between array passes
我有一个基本数组和任意数量的数组 - 不是 实际上 数组,而是按顺序计算的值(最后会详细介绍)。我想在基本数组值前面插入新计算的值。
我使用的语言有动态数组,并且有一个名为 insert
的方法,可将值插入指定索引。
arr = [0, 1, 2]
// insert `9` in index `0`
arr.insert( 0, 9 )
// result
// [9, 0, 1, 2]
// insert `8` in index `2`
arr.insert( 2, 8 )
// result
// [9, 0, 8, 1, 2]
可视化问题:
基础数组由o
构成,新值有a
、b
等
// values
o o o o o
a a a a a
b b b b b
c c c c c
d d d d d
e e e e e
// desired result in the end of each value calculation loop
o o o o o
oa oa oa oa oa
oab oab oab oab oab
oabc oabc oabc oabc oabc
逐步(循环)插入可视化
o o o o o
// insert( 1, a )
oa o o o o
// insert( 3, a )
oa oa o o o
// insert( 5, a )
oa oa oa o o
// insert( 7, a )
oa oa oa oa o
// insert( 9, a )
oa oa oa oa oa
// insert( 2, b )
oab oa oa oa oa
// insert( 5, b )
oab oab oa oa oa
// insert( 8, b )
oab oab oab oa oa
// insert( 11, b )
oab oab oab oab oa
.
.
.
它在代码中的实际样子:
for( j = 0; j < 10; j++ )
{
for( i = 0; i < baseArrLength; i++ )
{
idx = (j+1) + (i * (j+2));
base.insert( idx, val );
}
}
第一个循环确定 'type-amount' 个要添加的新值。以前面所述的字母形式来说,当j == 0
时,计算并插入a
值;当j == 1
,做b
,等等
第二个循环进行计算,最好将计算值插入基本数组(主要问题)。
i*2+1
适用于第一个循环 (a
),但我不确定如何修改它以适应其余循环。如何确定要插入的idx
?
我用insert
思考是不是做错了?
编辑:测试片段:
期望的输出:
o a b c d o a b c d o a b c d o a b c d o a b c d
function test()
{
base = ["o","o","o","o","o"];
baseLength = 5;
for( j = 0; j < 4; j++ )
{
for( i = 0; i < baseLength; i++ )
{
// the problem
idx = (j+1) + (i * (j+2));
// "a" or "b"...
val = GetVal(j);
base.insert( idx, val );
}
}
for( i = 0; i < base.len(); i++ )
{
print( base[i] + " " );
}
}
function GetVal(j)
{
switch(j)
{
case 0: return "a";
case 1: return "b";
case 2: return "c";
case 3: return "d";
}
}
你的idx
逻辑错误。
// Loop 10 times
for(int j = 1; j < 11; j++){
String val;
// TODO: val becomes set from some calculation the Questioner does
int idx = j;
for(int i = 0; i < baseArrLength; i++){
idx = idx + j + 1;
base.insert(idx, val);
}
}
我在提问的当天找到了公式。是
(i+2) + (j * (i+2))
其中i
是外循环,j
是内循环。
我有一个基本数组和任意数量的数组 - 不是 实际上 数组,而是按顺序计算的值(最后会详细介绍)。我想在基本数组值前面插入新计算的值。
我使用的语言有动态数组,并且有一个名为 insert
的方法,可将值插入指定索引。
arr = [0, 1, 2]
// insert `9` in index `0`
arr.insert( 0, 9 )
// result
// [9, 0, 1, 2]
// insert `8` in index `2`
arr.insert( 2, 8 )
// result
// [9, 0, 8, 1, 2]
可视化问题:
基础数组由o
构成,新值有a
、b
等
// values
o o o o o
a a a a a
b b b b b
c c c c c
d d d d d
e e e e e
// desired result in the end of each value calculation loop
o o o o o
oa oa oa oa oa
oab oab oab oab oab
oabc oabc oabc oabc oabc
逐步(循环)插入可视化
o o o o o
// insert( 1, a )
oa o o o o
// insert( 3, a )
oa oa o o o
// insert( 5, a )
oa oa oa o o
// insert( 7, a )
oa oa oa oa o
// insert( 9, a )
oa oa oa oa oa
// insert( 2, b )
oab oa oa oa oa
// insert( 5, b )
oab oab oa oa oa
// insert( 8, b )
oab oab oab oa oa
// insert( 11, b )
oab oab oab oab oa
.
.
.
它在代码中的实际样子:
for( j = 0; j < 10; j++ )
{
for( i = 0; i < baseArrLength; i++ )
{
idx = (j+1) + (i * (j+2));
base.insert( idx, val );
}
}
第一个循环确定 'type-amount' 个要添加的新值。以前面所述的字母形式来说,当j == 0
时,计算并插入a
值;当j == 1
,做b
,等等
第二个循环进行计算,最好将计算值插入基本数组(主要问题)。
i*2+1
适用于第一个循环 (a
),但我不确定如何修改它以适应其余循环。如何确定要插入的idx
?
我用insert
思考是不是做错了?
编辑:测试片段:
期望的输出:
o a b c d o a b c d o a b c d o a b c d o a b c d
function test()
{
base = ["o","o","o","o","o"];
baseLength = 5;
for( j = 0; j < 4; j++ )
{
for( i = 0; i < baseLength; i++ )
{
// the problem
idx = (j+1) + (i * (j+2));
// "a" or "b"...
val = GetVal(j);
base.insert( idx, val );
}
}
for( i = 0; i < base.len(); i++ )
{
print( base[i] + " " );
}
}
function GetVal(j)
{
switch(j)
{
case 0: return "a";
case 1: return "b";
case 2: return "c";
case 3: return "d";
}
}
你的idx
逻辑错误。
// Loop 10 times
for(int j = 1; j < 11; j++){
String val;
// TODO: val becomes set from some calculation the Questioner does
int idx = j;
for(int i = 0; i < baseArrLength; i++){
idx = idx + j + 1;
base.insert(idx, val);
}
}
我在提问的当天找到了公式。是
(i+2) + (j * (i+2))
其中i
是外循环,j
是内循环。