3.9-1求解满足条件的元素对的个数问题

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;
}
    原文作者:塞上江南o
    原文地址: https://blog.csdn.net/qq_43192537/article/details/102795317
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞