小明酷爱数学,因为数学实在是太有趣了,因此他天天做数学题,但是聪明的小明也是会遇到困难的。有一天他的山老师题出了一个问题:一个集合存在n个数,请问集合中有多少个数,恰好等于集合中另外两个数之和?小明想不到方法,只能一个一个计算,但是着实在太麻烦了,他知道你已经做出来这道题,所以向你发出了求救请求,用代码帮助小明解决此问题。
输入格式:
输入一个数字n,(0=<n<=100)表示集合中数字的个数,接下来的一行,包含n个集合中的数字。其中集合中的数字大小不超过10000.
输出格式:
输出该题目的答案。
输入样例:
4
1 2 3 4
输出样例:
在这里给出相应的输出。例如:
2
知识点
对题目的理解:集合中哪几个可以构成这种关系
参考代码
sort已经把数组排好序
via从前开始,vib从后开始,如果这两个数的和比要比的数大,就把vib减一就行了
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 100
int n;
int a[M];
int Count=0;
int main(){
//freopen("E:\\programme\\C++\\test.txt","r",stdin);
scanf("%d",&n);
for (int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
for (int i=0;i<n;i++){
int via=0,vib=n-1;
while(via != vib){
if (a[via]+a[vib]==a[i] && a[via]!=a[vib]) {
Count++;
break;
}
else {
if (a[via]+a[vib] < a[i]) via++;
else vib--;
}
}
}
printf("%d",Count);
return 0;
}
参考代码
#include<iostream>
using namespace std;
int main(){
int n;cin>>n; //个数
int arr[1010],cnt=0;
for(int i=0;i<n;i++){
cin>>arr[i];
}
for(int i=0;i<n;i++){
int flag=0;
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
if(i!=j&&j!=k&&arr[i]==arr[j]+arr[k]){
cnt++;
flag=1;
break;
}
}
if(flag)break;//有就行
}
}
cout<<cnt/2;
}