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

如何用嵌套循环在模拟二维表的一维数组中定位目标元素并赋值?

用嵌套循环在一维数组模拟的行列中查找目标元素的位置

嘿,我明白你卡在嵌套循环里给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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:38:29