You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

3D数组转2D数组排列问题:实现连续3×6数组输出

修正3D数组转2D数组的排列逻辑,实现连续数值的3×6输出

原代码将arr1[2][3][3](2个3×3的块)转换为arr2[3][6]时,输出是两个3×3块左右并排的形式,但需求是将数值连续填充为3行6列的数组——第一行包含前6个输入值,第二行包含中间6个,第三行包含最后6个。

修正后的代码

#include <stdio.h>

int main()
{
    int i, j, k;               
    int arr1[2][3][3];         
    int arr2[3][6];            
    printf("enter the values in the array: \n");
    for (i = 0; i < 2; i++)   
    {
        for (j = 0; j < 3; j++)   
        {
            for( k = 0; k < 3; k++)      
            {
                printf("the value at arr[%d][%d][%d]: ", i, j, k);
                scanf("%d", &arr1[i][j][k]);
                // 计算当前元素在arr2中的行和列索引
                int arr2_row = (i * 3 + j) / 2;
                int arr2_col = ((i * 3 + j) % 2) * 3 + k;
                arr2[arr2_row][arr2_col] = arr1[i][j][k];
            }
        }
    }

    printf("printing the values in 2D array: \n");
    for (j = 0; j < 3; j++)
    {
        for (k = 0; k < 6; k++)
        {
            printf("%d ", arr2[j][k]);
        }
        printf("\n");
    }
    return 0;
}

关键改动说明

  1. 移除了原代码中逻辑错误的d1和d2偏移变量,改用直接计算目标索引的方式,避免块并排的问题。
  2. 核心映射逻辑:
    • arr2_row = (i * 3 + j) / 2:3D数组共有6个行(2个块×3行/块),每2行合并为arr2的一行,通过整数除法得到对应的目标行号。
    • arr2_col = ((i * 3 + j) % 2) * 3 + k:判断当前3D行是合并后行的前半段还是后半段,前半段对应arr2的0-2列,后半段对应3-5列,再加上列偏移k得到最终列索引。
  3. 清理了输出循环中无效的if(k == 6)判断(k的取值范围是0-5,该条件永远不会触发),简化输出逻辑。

内容的提问来源于stack exchange,提问作者Ally

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:57:51