题目描述
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
最近老师出了一些测验题,请你帮忙求出答案。
(本题目为2014NOIP普及T1)
输入格式
共两行,第一行包含一个整数nn,表示测试题中给出的正整数个数。
第二行有nn个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
输出格式
一个整数,表示测验题答案。
输入输出样例
输入
4
1 2 3 4
输出
2
说明/提示
【样例说明】
由1+2=3,1+3=4,故满足测试要求的答案为2。
注意,加数和被加数必须是集合中的两个不同的数。
【数据说明】
对于100%的数据,3≤n≤100,测验题给出的正整数大小不超过10,000
看看抚州的云放松一下吧!
1.题意
题目大意就是在给出的数字中,找出所有一个数是另外两个不同的数之和的数,求出有几个数即可。本题唯一的坑就是好几组不同的数都有可能等于同一个数,一定要避开这个坑。
2.思路
先输入所有的数,for循环嵌套,如果一个数已经等于另外两数之和的话,跳出循坏,然后进行下一个数,上码。
hhh🌝🌝🌝
#include <stdio.h>
int main()
{
int n = 0, count = 0;
int arr[100] = {0};
// 输入数组元素的个数 n
scanf("%d", &n);
// 输入所有的数并存入数组 arr
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
// 遍历数组中的每一个数
for (int i = 0; i < n; i++)
{
int isprime = 1;
// 假设当前数是素数,下面的循环会根据条件修改这个标志
for (int x = 0; x < n; x++)
{
if (isprime == 0)
break;
// 再嵌套一层循环,遍历所有的数与当前数组成可能的两数之和的组合
for (int y = 0; y < n; y++)
{
if (x == y)
continue; // 如果两个索引相同,跳过本次循环,避免使用同一个数两次
// 判断当前数是否等于另外两个数之和
if (arr[i] == arr[x] + arr[y])
{
count++;
isprime = 0;
break; // 跳出内层循环,因为已经找到了满足条件的两数之和
}
}
}
}
// 输出满足条件的数的个数
printf("%d", count);
return 0;
}
反思:这道题比较烦的,就是用了四个for,记住千万不要把括号打错了!👍👍