首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在值的倍数处插入数组,其中值在数组之间递增。

在值的倍数处插入数组,其中值在数组之间递增。
EN

Stack Overflow用户
提问于 2020-01-04 19:29:36
回答 2查看 85关注 0票数 0

我有一个基本数组和任意数量的数组--实际上不是数组,而是按顺序计算的值(最后将详细介绍)。我想在基数组值前面插入新计算的值。

我使用的语言具有动态数组,并有一个名为insert的方法,该方法将值插入到指定的索引中。

代码语言:javascript
复制
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组成,新的值是ab等。

代码语言:javascript
复制
// 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

逐步(循环)插入可视化

代码语言:javascript
复制
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
.
.
.

它在代码中的实际外观:

代码语言:javascript
复制
for( j = 0; j < 10; j++ )
{
    for( i = 0; i < baseArrLength; i++ )
    {
        idx = (j+1) + (i * (j+2));

        base.insert( idx, val );
    }
}

第一个循环确定要添加的新值的“类型数量”。在前面提到的信函形式中,当j == 0时,计算并插入a值;当j == 1、do 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

代码语言:javascript
复制
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";
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-02 01:53:45

我在同一天发现了提出这个问题的公式。它是

(i+2) + (j * (i+2))

其中i是外部循环,j是内部循环。

票数 0
EN

Stack Overflow用户

发布于 2020-01-04 20:13:59

您的idx逻辑是错误的。

代码语言:javascript
复制
// 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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59594113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档