【问题标题】:Transforming a 2x4 array into a 4x2, and copying all the elemets将 2x4 数组转换为 4x2,并复制所有元素
【发布时间】:2021-12-29 02:53:10
【问题描述】:

过去几个小时我一直在研究这段代码,但我还没有真正弄清楚如何做我需要做的事情,基本上我正在尝试复制 2x4 的元素数组成 4x2

输入数组:

{1,3,5,7}
{2,4,6,8}

所需的输出:

{1,5}
{2,6}
{3,7}
{4,8}

到目前为止我已经尝试过什么

int arr1[4][2];
int arr2[2][4];
int x,y;


for (x=0; x<4; x++){
    for(y=0; y<2; y++){
        arr1[x][y] = arr2[y][x];
    }
}

任何关于我如何解决问题的建议将不胜感激。

【问题讨论】:

  • 如果配对始终相同,您可以跳过循环并手动进行。也就是说,你的配对逻辑是什么?哪个元素应该去哪里?一旦你排除了这个可能性,你就可以相应地调整你的循环。
  • 配对是指将 4x2 变成 2x4,我该怎么做,假设我不知道数组行或列索引,那么我认为这不可能
  • 好吧,排序背后一定有某种规则,否则这将成为一项不可能完成的任务。在您的示例中,您总是将每个阵列的 1/3 和 2/4 配对。那是你的规则。现在您需要做的就是告诉您的计算机。
  • 你确定你的例子是正确的吗?起初,我认为这是一个简单的转置(在代数意义上)。但是看看你的例子,这是完全不同的事情。对于转置,您的代码似乎正确

标签: c++ arrays c sorting


【解决方案1】:

我支持@fern17,您的示例可能不正确,并且您需要正确实现的转置。

如果您的示例是正确的,那么您需要计算将输入索引映射到输出索引的函数。以下是可以的,但我不知道如何推广到其他尺寸:

#include <stdio.h>

int main() {
    int src[2][4] = {
        {1,3,5,7},
        {2,4,6,8}
    };
    int dst[4][2];
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 2; j++) {
            dst[i][j] = src[i % 2][2 * j + i / 2];
            printf("%d%s", dst[i][j], j + 1 < 2 ? ", " : "\n");
        }
    }
}

这会给你这个输出:

1, 5
2, 6
3, 7
4, 8

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 2018-05-05
    • 1970-01-01
    • 2012-05-30
    • 2020-11-29
    • 1970-01-01
    • 2020-06-26
    • 2019-11-02
    • 2012-12-11
    相关资源
    最近更新 更多