题解:P2141 [NOIP2014 普及组] 珠心算测验

· · 题解

题意

题意为寻找两个不同的数,看看是否等于数组中的另一个数即可。

思路

每次来循环第一个加数,建立一个标记 ok 并在不成立时继续循环第二个加数,再在不成立时循环和,看三个数中是否不相等,并且两数相加等于第三个数,就让 ok 成立。最后在每次第一层循环末尾时,看看 ok 是否成立,成立将总和加一。输出总和即可。让我们来看看核心代码的意思吧:

for (int i = 1; i <= n; i++) {//循环第一个加数
    bool ok = false;//是否成立
    for (int j = 1; j <= n && !ok//不符合才循环; j++) {//循环第二个加数
        for (int k = j + 1; k <= n && !ok//不符合才循环; k++) {//循环和
            if (i != j && i != k) {//如果不相等
                if (a[i] == a[j] + a[k]) {//两数相加等于第三个数
                    ok = true;//符合
                }
            }
        }
    }
    if (ok) {//符合sum就加一
        sum++;
    }
}

整体代码

//搁这不是给你抄的!
#include <bits/stdc++.h>
using namespace std;
int n, a[101];
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    int sum = 0;
    for (int i = 1; i <= n; i++) {
        bool ok = false;
        for (int j = 1; j <= n && !ok; j++) {
            for (int k = j + 1; k <= n && !ok; k++) {
                if (i != j && i != k) {
                    if (a[i] == a[j] + a[k]) {
                        ok = true;
                    }
                }
            }
        }
        if (ok) {
            sum++;
        }
    }
    cout << sum;
}