如何用嵌套循环在模拟二维表的一维数组中定位目标元素并赋值?
用嵌套循环在一维数组模拟的行列中查找目标元素的位置
嘿,我明白你卡在嵌套循环里给r和c赋值的问题了!先把你的代码补全,同时把嵌套循环的逻辑理清楚:
#include <stdio.h> int main() { int arr[9] = // act as a 3 X 3 table { 2, 34, 6, 7, 45, 45, 35, 65, 2 }; int target = 7;// r = 1; c = 0 int r = 0; // row of the target int c = 0; // col of the target int rows = 3; int cols = 3; // 别忘了定义列数,3x3的表格列数也是3 // 嵌套循环实现查找 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { // 一维数组的索引 = 当前行号 * 列数 + 当前列号 if (arr[i * cols + j] == target) { r = i; // 找到目标后赋值行号 c = j; // 赋值列号 // 找到目标就跳出所有循环,不用继续遍历 goto end_search; // 用goto在这里很直观,也可以用flag替代 } } } end_search: printf("目标元素%d的位置:行=%d,列=%d\n", target, r, c); return 0; }
你之前踩坑的核心原因
大概率是没明确一维数组索引和行列的对应关系:对于rows行cols列的模拟表格,第i行第j列的元素,在一维数组里的索引是i * cols + j。只要在嵌套循环里遍历每一个i(行)和j(列),找到匹配目标后直接给r和c赋值就行。
额外小提示
- 如果你不想用
goto,可以定义一个布尔变量int found = 0,找到目标后设为1,然后在内层循环结束后判断found,跳出外层循环。 - 你提到的除法+取模方法可以用来验证结果:如果知道一维数组的索引
idx,行号r = idx / cols,列号c = idx % cols,两种方法的结果是一致的。
内容的提问来源于stack exchange,提问作者kiwipinapple
相关产品推荐
相关产品推荐

