思路: 给定n个数,找是否存在两个数之和为k ai+aj=k,即是否存在数是k-aj,问题转化为找数问题 先排序数组后一次 二分查找找是否有k-ai,如果有返回true,分数+1 登录后复制 #include<iostream> #include<algorithm> using namespace std; int n,k; int a[10000]; bool bin_search(int i,int target){ int left=i,right=n; while(left<=right){ int mid=(left+right)/2; if(a[mid]==target){ return true; } else if(a[mid]<target){ left=mid+1; } else{ right=mid-1; } } return false; } int main(){ cin>>n>>k; int ans=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>a[j]; } sort(a+1,a+n+1); for(int j=1;j<=n;j++){ if(bin_search(j+1,k-a[j])){ ans++; break; } } } cout<<ans; } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38. 原创作者: u_16969274 转载于: https://blog.51cto.com/u_16969274/11813548