输入共两行,第一行包含一个整数 n ,表示测试题中给出的正整数个数。
第二行有 n 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
输出共一行,包含一个整数,表示测验题答案。
对于 100% 的数据, 3 ≤ n ≤ 100 ,测验题给出的正整数大小不超过 10,000 。
#include<iostream> #include<algorithm> using namespace std; int main() { int n; cin>>n; int a[n]; int b[n]; int x = 0; int i; for(i=0;i<n;i++) cin>>a[i]; sort(a,a+n); int m=0; int j,k; int y; int flag; for(i=0;i<n-2;i++) { for(j=i+1;j<n-1;j++) { for(k=j+1;k<n;k++) { if(a[i]+a[j]==a[k]) { flag = 0; for(y=0;y<x;y++) { if(a[k] == b[y]) { flag = 1; break; } } if(flag==0) { m++; b[x++] = a[k]; } } } } } cout<<m; }
先对所有元素进行排序,然后判断前两个相加是否等于后面的,注意这题有个小坑,不是判断多少个式子成立,而是判断符合结果的数有多少个,所以用一个数组储存符合的和数,再此得此和数时不进行判断。
原文:https://www.cnblogs.com/miliye/p/10202264.html