问题描述】 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。 【输入形式】 输入的第一行包含一个整数n,表示给定整数的个数。 第二行包含所给定的n个整数。 【输出形式】 输出一个整数,表示值正好相差1的数对的个数。 【样例输入】 6 10 2 6 3 7 8 【样例输出】 3 C++实现
时间: 2024-01-27 18:04:14 浏览: 32
以下是基于题意的 C++ 实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n); // 排序
int ans = 0;
for (int i = 0; i < n - 1; i++) {
if (a[i + 1] - a[i] == 1) {
ans++;
}
}
cout << ans << endl;
return 0;
}
```
对于给定的 n 个整数,先将其排序,然后遍历数组,如果相邻的两个数的差为 1,就将答案加 1。最后输出答案即可。
相关问题
用python语言实现【问题描述】 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。 【输入形式】 输入的第一行包含一个整数n,表示给定整数的个数。 第二行包含所给定的n个整数。 【输出形式】 输出一个整数,表示值正好相差1的数对的个数。小数在前,大数在后,如有多组输出顺序按照第一个数字递增排序,重复数字只显示一组。
以下是使用Python实现的代码:
```python
n = int(input()) # 输入整数个数
nums = list(map(int, input().split())) # 输入整数列表
nums_set = set(nums) # 将列表转为集合,去除重复元素
count = 0 # 记录相差1的数对个数
for num in nums_set:
if num + 1 in nums_set: # 判断num+1是否在集合中
count += 1
print(count) # 输出相差1的数对个数
```
该代码首先读入整数个数和整数列表,然后将整数列表转为集合,去除重复元素。接着使用循环判断集合中的每个元素num,是否有num+1也在集合中,如果是则说明存在一对相差1的数,将计数器count加1。最后输出计数器count即可。
【问题描述】 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。 【输入形式】 输入的第一行包含一个整数n,表示给定整数的个数。 第二行包含所给定的n个整数。 【输出形式】 输出一个整数,表示值正好相差1的数对的个数。小数在前,大数在后,如有多组输出顺序按照第一个数字递增排序,重复数字只显示一组。
以下是一个 Python3 的解法:
```python
n = int(input())
nums = list(map(int, input().split()))
nums_set = set(nums) # 先使用 set 去重
result = 0
for num in nums_set:
if num + 1 in nums_set: # 如果 num+1 在集合中,说明存在一对数差为1
result += 1
print(result)
```
思路是先使用 set 对输入的整数列表去重,然后遍历每个数,如果它的后继数(即加1后的数)也在集合中,说明存在一对数差为1,结果加1。最后输出结果即可。
注意,题目要求输出的是数对的个数,而不是数的个数,因此如果有重复数字,只能算作一对。