1. 程式人生 > >求解滿足條件的元素對個數問題

求解滿足條件的元素對個數問題

【問題描述】給定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);
}