NOIP201401珠心算测验题解
作者:互联网
这道题看起来很简单,但还是有坑的!
这是我最开始的代码:
#include<bits/stdc++.h> using namespace std; int n; int a[101]; int flag[101]={true}; int i,j; int k; int ans=0; inline void Read() { cin>>n; for(i=0;i<n;i++) cin>>a[i]; sort(a,a+n); } inline void solve() { for(i=0;i<n;i++) { for(j=i;j>=0;j--) { for(k=j;k>=0;k--) { if(k==j) continue; else if(a[j]+a[k]==a[i]) { ans++; } } } } cout<<ans<<endl; } int main() { Read(); solve(); }
但是只得了30分,WA的一声哭了出来。
那么原因是什么呢?
好好读题!
其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
而上面的代码求的是方法的个数,比如6=1+5、2+4,算了两次。
正确的代码是这样的:
#include<iostream> #include<algorithm> using namespace std; int main( ) { int n,ans=0; int i,j,k,flag=0; int a[1010]; cin>>n; for(i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); for(i=n-1;i>=0;i--) { for(j=0;j<i;j++) { for(k=j+1;k<i;k++) { if(a[i]==a[j]+a[k]) { ans++; break; } } if(a[i]==a[j]+a[k]) { break; } } } cout<<ans<<endl; return 0; }
结束!!!
标签:sort,NOIP201401,void,namespace,int,ans,include,测验题,珠心算 来源: https://www.cnblogs.com/wangshiyao/p/11226788.html