该题思路较多且都比较容易想到,最容易想到的就是暴力枚举所有数可能组成的数对,然后将其中数对大小相减为1或-1的进行计数即可
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 1010; int n; int num[N]; int main() { cin >> n; for (int i = 0; i < n; i ++ ) cin >> num[i]; int res = 0; for (int i = 0; i < n; i ++ ) for (int j = i + 1; j < n ; j ++ ) if (abs(num[i] - num[j]) == 1) res ++; cout << res << endl; return 0; }
此外,我们也可以采用先对输入的数据排序后,将前后两个数相差为1的数对计数即可
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int n, answer = 0; cin >> n; vector<int>ans; for(int i=0;i<n;i++){ int x; cin >> x; ans.push_back(x); } sort(ans.begin(),ans.end()); int length = ans.size(); for(int i=1;i<length;i++){ if(ans[i] - ans[i-1] == 1){ answer++; } } cout << answer; return 0; }
另外也可以使用哈希进行存储后对前后存在数的数对进行计数即可
#include<iostream> using namespace std; int n,ans=0; int arr[10005]; int main(){ cin>>n; for(int i=0;i<n;i++){ int v; cin>>v; arr[v]=1; } for(int i=0;i<10000;i++){ if(arr[i]&&arr[i+1]){ ans++; } } cout<<ans<<endl; return 0; }
CCF CSP——相邻对数(201409-1)
最新推荐文章于 2024-08-23 21:39:27 发布