求解滿足條件的元素對個數問題
阿新 • • 發佈:2018-12-18
【問題描述】給定N個整數Ai以及一個正整數C,問其中有多少對i、j滿足Ai-Aj=C。 輸入描述:第1行輸入兩個空格隔開的整數N和C,第2~N+1行每行包含一個整數Ai。 輸出描述:輸出一個數表示答案。 輸入樣例:
5 3
2
1
4
2
5
輸出樣例:
3
滿足Ai-Aj=C,即滿足Ai=Aj+C。 首先,對序列進行遞增排序。從第j(0≤j<N)個元素開始依次與第i(j<i<n)個元素進行比較,若Ai=Aj+C,計數器count加1;若Ai>Aj+C,退出迴圈。最後返回count。
#include<vector> #include<iostream> #include<algorithm> using namespace std; //為了避免排序後造成原序列的相對位置發生改動,這裡使用vector容器 int func(vector<int> ve,int C) { int count = 0; sort(ve.begin(),ve.end()-1); //對ve容器進行遞增排序 int n = ve.size(); for(int j=0;j<n;j++) { for(int i=j+1;i<n;i++) { if(ve[i] == ve[j]+C) count++; else if(ve[i]>ve[j]+C) break; } } return count; } int main() { int n,x; cin>>n>>x; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; vector<int> ve(a,a+n); cout<<"\n"<<func(ve,x); }