思路: two pointers
#include <bits/stdc++.h> #include<math.h> #include <string> using namespace std; const int MAX_LEN = 100005; bool cmp(int a,int b){ return a>b; } int main(){ //int temp[MAX_LEN]; /*for(int i=0;i<MAX_LEN;++i){ temp[i] = 0; }*/ int n,m; cin>>n; cin>>m; int temp[n]; for(int i=0;i<n;++i){ cin>>temp[i]; } sort(temp,temp+n,cmp); /*int count = 0; for(int i=0;i<MAX_LEN;++i){ if(temp[i] > 0){ count++; } }*/ int fir = n-1; int end = 0; while(end != fir){ if(temp[fir] + temp[end] < m){ fir--; } if(temp[fir] + temp[end] > m){ end++; } if(temp[fir] + temp[end] == m){ cout<<temp[fir]<<" "<<temp[end]; break; } } if(end == fir){ cout<<"No Solution"; } system("pause"); return 0; }
注意要continue
#include <bits/stdc++.h> #include<math.h> #include <string> using namespace std; const int MAX_LEN = 100005; bool cmp(int a,int b){ return a>b; } int main(){ //int temp[MAX_LEN]; /*for(int i=0;i<MAX_LEN;++i){ temp[i] = 0; }*/ int n,m; cin>>n; cin>>m; int temp[n]; for(int i=0;i<n;++i){ cin>>temp[i]; } sort(temp,temp+n,cmp); /*int count = 0; for(int i=0;i<MAX_LEN;++i){ if(temp[i] > 0){ count++; } }*/ int fir = n-1; int end = 0; while(end != fir){ if(temp[fir] + temp[end] < m){ fir--; continue;//注意要continue } if(temp[fir] + temp[end] > m){ end++; continue;//注意要continue } if(temp[fir] + temp[end] == m){ cout<<temp[fir]<<" "<<temp[end]; break; } } if(end == fir){ cout<<"No Solution"; } system("pause"); return 0; }