新人第一次写博客,不过这个题还是挺有感触的。
这道题的思路其实还是比较容易出来了,就是先输入基本条件,然后计算,最后判断。 但是如何把它们以正确的方式应用就需要思考思考了。
这其中有一个坑就是,这输入的不超过100个数中,两两求和所得的数可能会有相等的情况,意味着判断时会出现重复的情况,这想必也是大多数人 WA 的原因。
首先用一个嵌套 for 语句将所有的两数之和输入到新的数组中(注意数组大小,算一下最大是多少个),避免 RE 。
然后为了填上那个坑,也是枚举,可以把储存和的数组进行排序,目的是令相等的两个和能够挨在一起,为什么要挨在一起呢?
因为在下面的代码中可以看到,在判断部分,我新定义了一个 temp 变量,储存上一个进行判断的和,若下一次循环进行判断的和和 _temp_相等,也就是 temp==b[i] 则直接 continue,不进行重复判断。
C++代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
int a[102]={0},b[10000]={0};
int i,k=0;
int ans=0;
int temp=0;
int main()
{
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(i=0;i<n;i++)
{
for(int j=i+1;a[j]!=0;j++)
{
b[k++]=a[i]+a[j];
}
}
sort(b,b+k,greater<int>());
for(i=0;i<k;i++)
{
if(temp==b[i])
{
continue;
}
temp=b[i];
for(int j=0;j<n;j++)
{
if(a[j]==b[i])
{
ans++;
break;
}
}
}
cout<<ans<<endl;
return 0;
}
第一次写博客,还请大神们多指导,希望能多学习。