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

C语言查找二维数组和为指定值的元素对出现重复输出问题

重复输出的原因
  • 循环逻辑错误:查找两个元素的和仅需要两层循环分别定位两个元素即可,你当前使用四层完全多余的循环,同一个符合条件的元素对会被外层循环反复匹配、多次输出。
  • 二维数组越界访问:你定义的num是3行4列的二维数组,第一维合法下标为02,第二维合法下标为03,但代码中value、value1的循环上限设为12,会大量读取数组外的内存垃圾值,同时同一个数组内的有效元素会被错误的下标组合多次访问,进一步加重重复输出问题。
  • 去重逻辑失效:你本意想通过value3 = value2 + 1避免元素对重复计算,但由于外层两层多余循环的存在,该限制完全无法生效,同一个元素对组合会被反复输出。
修复方案

可以先将二维数组按C语言行优先的存储规则,摊平为一维逻辑遍历,保证每个元素对仅判断一次,避免重复和越界问题,修改后代码如下:

#include <stdlib.h>
#include <stdio.h>

int main() {
    int num[3][4] = {5, -1, 17, 8, 4, 18, -3, 15, 26, 6, -6, 10};
    // 将二维数组指针转为int类型一维指针,方便按顺序访问12个元素
    int *p = (int*)num;
    int checker, val;

    printf("Enter integer to check: ");
    scanf("%d", &checker);
    printf("The pair of integers that add to %d are\n", checker);

    // 两层循环即可,外层取第i个元素,内层取i之后的第j个元素,保证每个对仅判断一次
    for (int i = 0; i < 11; i++) {
        for (int j = i + 1; j < 12; j++) {
            val = p[i] + p[j];
            if (val == checker) {
                printf("[%d,%d],", p[i], p[j]);
            }
        }
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:54:04