专栏文章

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

P2141题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miqmettz
此快照首次捕获于
2025/12/04 07:10
3 个月前
此快照最后确认于
2025/12/04 07:10
3 个月前
查看原文

题意

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

思路

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

整体代码

CPP
//搁这不是给你抄的!
#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;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...