C++ 获取数组的一部分

C++ 获取数组的一部分,c++,arrays,C++,Arrays,假设我有一个4乘4的矩阵,如下所示: 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 someArray[4] = your input. someBigArray[n][m]; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if(i < n/2) if(j < m/2) someBigArray[n

假设我有一个4乘4的矩阵,如下所示:

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
someArray[4] = your input.
someBigArray[n][m];

for(int i = 0; i < n; i++) {
    for(int j = 0; j < m; j++) {

        if(i < n/2) 
            if(j < m/2)
                someBigArray[n][m] = (char)(someArray[0] + offsetASCIIToA)
            else 
                someBigArray[n][m] = (char)(someArray[1] + offsetASCIIToA)
        else 
            if(j < m/2)
                someBigArray[n][m] = (char)(someArray[2] + offsetASCIIToA)
            else 
                someBigArray[n][m] = (char)(someArray[3] + offsetASCIIToA)
     }
}
用户输入一个随机部分编号,为了简单起见,将其设为2。 我想在大矩阵中创建2x2矩阵

Submatrice1:
1 1
2 2

Submatrice2:
3 3
4 4

Submatrice3:
1 1
2 2

Submatrice3:
3 3
4 4
然后我想替换

子矩阵1中带

矩阵2中每一个带b的数

矩阵3中的每个数字都带有

矩阵4中带d的每个数字

矩阵的最后一种形式:

a a c c
a a c c
b b d d
b b d d
这应该推广到n*m的情况


我不知道从哪里开始。我会提出任何想法。

我会这样做:

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
someArray[4] = your input.
someBigArray[n][m];

for(int i = 0; i < n; i++) {
    for(int j = 0; j < m; j++) {

        if(i < n/2) 
            if(j < m/2)
                someBigArray[n][m] = (char)(someArray[0] + offsetASCIIToA)
            else 
                someBigArray[n][m] = (char)(someArray[1] + offsetASCIIToA)
        else 
            if(j < m/2)
                someBigArray[n][m] = (char)(someArray[2] + offsetASCIIToA)
            else 
                someBigArray[n][m] = (char)(someArray[3] + offsetASCIIToA)
     }
}
someArray[4]=您的输入。
someBigArray[n][m];
对于(int i=0;i
这是一个psedoo代码解决方案。您可以针对边界情况或其他情况进行调整。我只想让整数除法来决定你的边界情况,这是最有意义的,也是最简单的,但是你可以用一些小的方法来修改逻辑,使它像你想要的那样运行。您还可以在多个for循环中包含逻辑,如果i=n/2、j=m/2、i
for(int i = 0; i < n/2; i++)
    for(int j = 0; j < m/2; j++)
        someBigArray[n][m] = (char)(someArray[0] + offsetASCIIToA)

for(int i = n/2; i < n; i++)
    for(int j = 0; j < m/2; j++)
        someBigArray[n][m] = (char)(someArray[1] + offsetASCIIToA)

for(int i = 0; i < n/2; i++)
    for(int j = m/2; j < m; j++)
        someBigArray[n][m] = (char)(someArray[2] + offsetASCIIToA)

for(int i = n/2; i < n; i++)
    for(int j = m/2; j < m; j++)
        someBigArray[n][m] = (char)(someArray[3] + offsetASCIIToA)
for(int i=0;i
您现在所要做的就是计算将someArray中的值转换为相应的字符值。只需在ASCII表格中查找此信息,然后使用强制转换


注意:这是对你的问题做一些假设。我觉得你的榜样可能特别糟糕。如果你的数组可能是5个值,那么你如何修改它可能会被定义为太多的方法,我无法深入了解如何解决它。

我会使用基于索引的计算,因为初始内容似乎无关紧要

/* Input: matrix and the size (2 in the example) */


/* The number of blocks. */
int block_height = (matrix.length + size/2) / size;

for(int row = 0; row < matrix.length; row++) {
  for(int col = 0; col < matrix[0].length; col++) {
    int block_row = row / size;
    int block_col = col / size;

    /* If we count up -> down, right -> left */
    char block_index = block_col * block_height + block_row;

    matrix[row][col] = 'a' + block_index;
  }
}

您将如何解决歧义?有3套
[1,2]
和3套
[3,4]
?在你的例子中,他们是如何被选择的?我认为没有足够的信息,你没有概述边界案例。有一个非常特殊的情况,其中n不仅是一个正方形,而且是一个可以由4个正方形组成的正方形。我们需要更多的问题信息来概括这一点。这意味着在开始之前矩阵中的内容并不重要,对吗?这只取决于大小。如果部分数不能均匀地分成大矩阵,结果会是什么。例如,在上面的例子中,如果部分数是3,那么生成的矩阵会是什么样子?您可以首先将所有这些分解为更小的问题。然后,依次解决每个小问题,必要时再进行分解。我不相信这是他想要的行为,尽管他选择了一个非常简单(可能是最简单的)的例子来向我们展示,因此很难确定。很可能他指的是不同的东西。如果我猜对了他的问题,我就把这个留在这里。现在我注意到这正是我想要的。泰,伙计