C语言求二维数组分块最大值并生成2x2结果数组的代码修改方法
二维数组分块取最大值实现方案
需求说明
将二维数组按指定大小划分为互不重叠的区域,提取每个区域的最大值作为该区域的代表值,最终生成由各区域最大值组成的新数组。示例如下:
原始4×4数组:
12 14 | 32 9 19 24 | 3 4 ---------------- 11 26 | 3 8 13 24 | 7 5按2×2尺寸分块后取最大值,输出结果为:
24 32 26 8
修改思路
- 补充原代码中缺失的数组尺寸常量
N的定义 - 每个分块遍历前先初始化当前分块的最大值变量
- 遍历分块内元素时逐一比对更新最大值
- 分块遍历完成后将最大值存入结果数组的对应位置
完整实现代码
#include <stdio.h> #define N 4 // 定义原始二维数组的行列数 int main() { int disp[4][4] = {{12,14,32,9}, {19,24,3,4}, {11,26,3,8}, {13,24,7,5}}; int quadrant_size = 2; int res_size = N / quadrant_size; int res[res_size][res_size]; // 存储最终结果的数组 // 遍历所有分块 for(int x = 0 ; x < N ; x += quadrant_size){ for(int y = 0 ; y < N ; y += quadrant_size){ int max_val = disp[x][y]; // 初始化当前分块最大值 // 遍历分块内所有元素 for(int i = x ; i < x + quadrant_size ; i++){ for(int j = y ; j < y + quadrant_size ; j++){ if(disp[i][j] > max_val){ max_val = disp[i][j]; } } } // 将当前分块最大值存入结果数组 res[x / quadrant_size][y / quadrant_size] = max_val; } } // 输出结果数组 for(int i = 0; i < res_size; i++){ for(int j = 0; j < res_size; j++){ printf("%d ", res[i][j]); } printf("\n"); } return 0; }
内容的提问来源于stack exchange,提问作者user13839242
相关产品推荐
相关产品推荐

