如何在C++中重新定位一个数组中的元素

最大跳跃10th

我回答了这个面试问题,但我失败了,所以我来这里是为了不再失败!

我有一个大小为 16 和 5 < givenIndex < 10 的 int 数组。

我必须将这个索引中的元素打印每个可能的数组(有 16 个),方法是将 givenIndex 处的元素移动到数组中的每个位置并推动其余元素。

例如:

int array[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int givenIndex = 6;

因为array[givenIndex] = 7,我需要将 7 移动到每个可能的位置并打印该数组。

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

[7,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16]

[1,7,2,3,4,5,6,8,9,10,11,12,13,14,15,16]

[1,2,7,3,4,5,6,8,9,10,11,12,13,14,15,16]

这是 16 个案例。

我正在尝试的是:

for(int i = 0;i<16;i++){
        array[i] = array[indexInsercion]
        if (i<indexInsert){
            //right shift
            array[i] = array[i+1]
        }else if(i == indexInsert){
            //no shift
        }else{
            //left shift
            array[i] = array[i-1]
        }
    }

我能得到一些帮助吗?

HS

如果期望只是按给定顺序打印数组的元素:

跟踪要打印的数组元素的当前索引,例如indx-

  • 如果当前元素处理的位置等于行号,则在 处打印元素givenIndex
  • 如果indx等于givenIndex跳过它,打印indx + 1元件,否则打印在元件indx和增加indx通过1

执行:

#include <iostream>
#include <array>

int main() {
    std::array<int, 16> array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    std::size_t givenIndex = 6;

    for (std::size_t i = 0, indx = 0; i < array.size(); indx = 0, ++i) {
        std::cout << '[';

        for (std::size_t j = 0; j < array.size(); ++j) {
            if (j == i) {
                std::cout << array[givenIndex] << ',';
                continue;
            }

            if (indx == givenIndex) {
                ++indx;
            }

            std::cout << array[indx++] << ',';
        }

        std::cout << ']';
        std::cout << '\n';
    }

    return 0;
}

输出:

# ./a.out
[7,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,]
[1,7,2,3,4,5,6,8,9,10,11,12,13,14,15,16,]
[1,2,7,3,4,5,6,8,9,10,11,12,13,14,15,16,]
[1,2,3,7,4,5,6,8,9,10,11,12,13,14,15,16,]
[1,2,3,4,7,5,6,8,9,10,11,12,13,14,15,16,]
[1,2,3,4,5,7,6,8,9,10,11,12,13,14,15,16,]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,]
[1,2,3,4,5,6,8,7,9,10,11,12,13,14,15,16,]
[1,2,3,4,5,6,8,9,7,10,11,12,13,14,15,16,]
[1,2,3,4,5,6,8,9,10,7,11,12,13,14,15,16,]
[1,2,3,4,5,6,8,9,10,11,7,12,13,14,15,16,]
[1,2,3,4,5,6,8,9,10,11,12,7,13,14,15,16,]
[1,2,3,4,5,6,8,9,10,11,12,13,7,14,15,16,]
[1,2,3,4,5,6,8,9,10,11,12,13,14,7,15,16,]
[1,2,3,4,5,6,8,9,10,11,12,13,14,15,7,16,]
[1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,7,]

如果期望改变数组中元素的顺序,然后打印数组:

首先将元素移动givenIndex数组0第 th 个索引,然后 -

  • 打印数组
  • 在每次迭代中,将当前元素与其数组中的下一个元素交换并打印出来。

执行:

#include <iostream>
#include <array>

void print_array (std::array<int, 16>& array) {
    std::cout << '[';
    for (std::size_t indx = 0; indx < array.size(); ++indx) {
        std::cout << array[indx] << ',';
    }
    std::cout << ']';
    std::cout << '\n';
}

void rearrange_array_elem (std::array<int, 16>& array, std::size_t givenIndx) {
    // move the element at givneIndx to first position in array
    for (std::size_t j = givenIndx; j > 0; --j) {
        std::swap (array[j], array[j - 1]);
    }

    // print array
    print_array (array);

    for (std::size_t indx = 0; indx < array.size() - 1; ++indx) {
        // swap current element with its next element
        std::swap (array[indx], array[indx + 1]);
        print_array (array);
    }
}

int main() {
    std::array<int, 16> array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    std::size_t givenIndex = 6;

    rearrange_array_elem (array, givenIndex);

    return 0;
}

输出:

# ./a.out
[7,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,]
[1,7,2,3,4,5,6,8,9,10,11,12,13,14,15,16,]
[1,2,7,3,4,5,6,8,9,10,11,12,13,14,15,16,]
[1,2,3,7,4,5,6,8,9,10,11,12,13,14,15,16,]
[1,2,3,4,7,5,6,8,9,10,11,12,13,14,15,16,]
[1,2,3,4,5,7,6,8,9,10,11,12,13,14,15,16,]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,]
[1,2,3,4,5,6,8,7,9,10,11,12,13,14,15,16,]
[1,2,3,4,5,6,8,9,7,10,11,12,13,14,15,16,]
[1,2,3,4,5,6,8,9,10,7,11,12,13,14,15,16,]
[1,2,3,4,5,6,8,9,10,11,7,12,13,14,15,16,]
[1,2,3,4,5,6,8,9,10,11,12,7,13,14,15,16,]
[1,2,3,4,5,6,8,9,10,11,12,13,7,14,15,16,]
[1,2,3,4,5,6,8,9,10,11,12,13,14,7,15,16,]
[1,2,3,4,5,6,8,9,10,11,12,13,14,15,7,16,]
[1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,7,]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从另一个数组的所有元素中过滤一个数组

如何用另一个数组的元素替换数组中的元素

如何在Swift中使用另一个数组中的元素过滤数组?

如何通过与另一个数组比较从一个数组中删除公共元素

如何在玉器中串联一个数组?

如何在实现框架后重新定位框架,或将浏览器分配给Progress ABL中的另一个框架?

如果元素本身位于另一个数组中,如何在元素的特定索引处插入元素?

如何在Javascript中获取另一个数组中某个数组元素的数字出现次数?

如何在一个数组中交换两个元素?

如何使用PHP将数组元素推到另一个数组中的特定位置

如何用另一个数组的元素替换数组中的特定关键元素

如何在python中的任意数组中将每个元素除以一个数字?

如何删除一个数组中的元素以便另一个数组

如何在另一个数组中存储数组的对象元素个数?

如何从另一个数组的元素中的每个字符填充一个数组?

如何在嵌套在Mongoose中另一个数组中的数组中添加元素?

如果一个数组的元素不在PHP的另一个数组中,如何获取多维度数组中的元素

如何使用一个数组来验证另一个数组中的元素长度?

如何从另一个数组中的多个元素中选择数组中的元素

如何从一个数组中滤除另一个数组中的元素?

如何将数组中的特定元素放到另一个数组中

如何在numpy中“膨胀”一个数组?

如何在C中的另一个数组上打印一个数组?

如何在另一个数组中的用户指定位置插入数组并获取结果数组?

如何从数组中删除元素,哪些元素是另一个数组?

如何从另一个数组中减去一个数组的每个元素?

如果元素在另一个数组中以角度匹配,如何推送数组的元素?

如何在nodejs中返回一个数组

如何在数组中搜索一个元素然后从同一个数组中输出另一个元素?