1 条题解

  • 0
    @ 2026-10-18 19:40:10

    一、解题思路

    1. 输入姻缘签数量 N,以及两个妖力值 A、B。
    2. 计算总妖力值 target = A + B。
    3. 依次输入每枚姻缘签的数值 C,同时判断它是否等于 target。
    4. 如果相等,就输出当前姻缘签的编号 i + 1,然后结束程序。

    注意: 题目中的姻缘签编号从 1 开始,而 C 语言数组下标从 0 开始,因此输出时需要使用 i + 1。

    二、C 语言参考代码

    #include <stdio.h>
    
    int main(void) {
        int N, A, B;
        int C[305];
    
        scanf("%d %d %d", &N, &A, &B);
    
        for (int i = 0; i < N; i++) {
            scanf("%d", &C[i]);
        }
    
        int target = A + B;
    
        for (int i = 0; i < N; i++) {
            if (C[i] == target) {
                printf("%d\n", i + 1);
                return 0;
            }
        }
    
        return 0;
    }
    

    三、样例演示

    输入:

    3 125 175
    200 300 400
    

    执行过程:

    姻缘签编号 数值 是否等于 (125+175=300)
    1 200 否
    2 300 是
    3 400 不需要继续检查

    输出:

    2
    

    四、复杂度分析

    • 时间复杂度: (O(N)),最多遍历数组两次。
    • 空间复杂度: (O(N)),使用数组保存所有姻缘签的数值。

    题目给出的 (N <= 300),所以这种解法完全满足要求。

    五、提交前注意事项

    • 不要输出额外文字,例如 The answer is: 或 姻缘签编号是。
    • 编号从 1 开始,所以不能直接输出 i。
    • 数组大小 305 足够存储最多 300 个整数。
    • 题目保证答案一定存在,不需要额外处理找不到答案的情况。

    总结: 这是一道典型的数组线性查找题,核心就是计算 A + B,再寻找与其相等的数组元素并输出下标加一。

    • 1

    信息

    ID
    1243
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    140
    已通过
    41
    上传者