相邻数对
一:题目描述
1.问题描述
给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。
2.输入格式
输入的第一行包含一个整数n,表示给定整数的个数。第二行包含所给定的n个整数。
3.输出格式
输出一个整数,表示值正好相差1的数对的个数。
4.样例输入
6
10 2 6 3 7 8
5.样例输出
3
6.样例说明
值正好相差1的数对包括(2, 3), (6, 7), (7, 8)。
7.测试用例规模于约定
1<=n<=1000,给定的整数为不超过10000的非负整数。
二:理解
对于第一个代码就是直接暴力。
第二个需要先排一下序,则之间差一的就是相邻数对。
第三个代码和第二个思路是一样的,不过用vector来解决的。
vector:vector用法
三:代码:
代码一:
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int num[1005];
int main()
{
int n,count = 0;
cin >> n;
for(int i=0; i<n; i++)
cin >> num[i];
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
if((num[i]+1) == num[j] ||(num[i]-1) == num[j])
count++;
cout << count/2;
return 0;
}
代码二:
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int num[1005];
int main()
{
int n,count = 0;
cin >> n;
for(int i=0; i<n; i++)
cin >> num[i];
sort(num,num+n);
for(int i=0; i<n; i++)
if(num[i+1]-num[i] == 1)
count++;
cout << count << endl;
return 0;
}
代码三:
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int num[1005],n;
#define loop(i,begin,end) for(int i=begin; i<end; i++)
int main()
{
int count = 0;
cin >> n;
vector<int>nums;
//输入n个数字
loop(i,0,n)
{
int num;
cin >> num;
nums.push_back(num);
}
sort(nums.begin(), nums.end());
loop(i,0,nums.size()-1)
if(nums[i+1] - nums[i] == 1)
count++;
cout << count << endl;
return 0;
}