【CCF CSP-20140901】相邻数对
题意概述
给定 n 个不同的整数,问这些数中有多少对整数,它们的值正好相差 1。
输入输出格式
输入的第一行包含一个整数 n,表示给定整数的个数。第二行包含所给定的 n 个整数。
输出一个整数,表示值正好相差 1 的数对的个数。
数据规模
1 ≤ n ≤ 1000 1\le n \le1000 1≤n≤1000,给定的整数为不超过 10000 的非负整数。
算法设计
可以暴力枚举每一对整数对,检验它们的差是否为 1 即可。为此可以先将这 n 个整数存储在一个数组中,然后枚举两个变量:i 枚举的区间为 [ 0 , n ) \left[0,n\right) [0,n),j 枚举的区间为 [ i + 1 , n ) \left[i+1,n\right) [i+1,n),j 之所以从 i+1 开始枚举,是为了防止重复枚举同一对整数对。最后统计相差为 1 的整数对的个数即可。
C++代码
#include <bits/stdc++.h>
using namespace std;
using gg = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
gg ni, ans = 0;
cin >> ni;
vector<gg> ai(ni);
for (gg& i : ai) {
cin >> i;
}
for (gg i = 0; i < ni; ++i) {
for (gg j = i + 1; j < ni; ++j) {
if (abs(ai[i] - ai[j]) == 1) {
++ans;
}
}
}
cout << ans;
return 0;
}