题目:OpenJudge - 2983:谁是你的潜在朋友OpenJudge - 2722:和数
描述
给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。
输入
共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个不大于10000的正整数组成的数列,相邻两个整数之间用单个空格隔开。
输出
一个整数,即数列中等于其他两个数之和的数的个数。
样例输入
4 1 2 3 4
样例输出
2
程序不难,注释也比较清楚,就不写详细的解题思路了,直接上代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,cnt=0,arr[105];
cin>>n;
//输入数组元素
for(int i=0;i<n;i++) cin>>arr[i];
//i表示的是:和的下标
for(int i=0;i<n;i++){
//加数只能在一个表达式中出现一次
//比如3=1+2符合题目要求;3=2+1就不算,因此用flag来标记加数出现的次数
bool flag=true;
//j表示的是:第一个加数的下标
for(int j=0;j<n&&flag;j++){
//k表示的是:第二个加数的下标
for(int k=0;k<n&&flag;k++){
//i,j,k对应的数字不能相同
if(arr[i]==arr[j]+arr[k] && i!=j&&i!=k&&j!=k){
//输出观察一下: 和arr[i] 第一个加数arr[j] 第二个arr[k]
//printf("%d=%d+%d\n",arr[i],arr[j],arr[k]);
cnt++;
//a[j]和a[k]在a[i]这个算式中已经出现了一次了,就不能在a[i]算式中出现了
//比如3=1+2,得到这种情况之后,就不能出现3=2+1的情况
flag=false;
}
}
}
}
cout << cnt;
return 0;
}