1.问题描述:
给定N个整数Ai以及一个正整数C,问其中有多少对i、j满足Ai-Aj=C
2.输入描述:
第1行输入两个空格隔开的整数N和C,第2~N+1行每行包含一个整数Ai
3.输出描述:
输出一个数表示答案
4.输入样例:
5 3
2
1
4
2
5
5.输出样例:
3
6.解题思路:
满足Ai-Aj=C,即满足Ai=Aj+C
首先,对序列进行递增排序。把Aj(0≤j<N)依次与Ai(j<i<n)进行循环比较,若Ai=Aj+C,则计数器count加1;若Ai>Aj+C,因为元素是递增排序,所以Ai后续的元素均大于Aj和C相加后的和,因此使用break结束本次循环比较,开始下一次比较。最后返回count
#include <bits/stdc++.h>
using namespace std;
// 为了避免排序后造成原序列的相对位置发生改动,这里使用vector容器
int f(vector<int> ve, int c) {
sort(ve.begin(), ve.end() - 1); // 对ve容器进行递增排序
int count = 0;
int n = ve.size();
for(int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) {
if(ve[j] == ve[i] + c)
count++;
else if(ve[j] > ve[i] + c)
break;
}
}
return count;
}
int main() {
int n,c;
cin >> n;
cin >> c;
int a[n];
for(int i = 0; i < n; i++)
cin >> a[i];
vector<int> ve(a, a+n);
cout << f(ve, c);
return 0;
}