PTA 最少分成几组
给定一个包含n个数的数列,由a1,a2,....,an组成,现在将这n个数分成若干组,使得每组中任意两个数|ai-aj|>1,(i!=j)。这个数列中的n个数最少可以分成几组呢?
输入格式:
第一行包含一个整数n(1≤n≤1000)。 第二行包含n个整数a1,a2,...,an(1≤ai≤10000,所有ai互不相同)。
输出格式:
输出仅一个整数,表示数列中n个数最少可以分成的组数。
输入样例1:
2
1 2
输出样例1:
2
输入样例2:
10
2 8 13 4 35 22 33 11 6 15
输出样例2:
1
思路
- 刚开始是想找到最长的且差值为1的连续数字的长度即可。
- 经过wxdl的提醒,其实答案只有0,1两个
- 比如345,3和5丢一组,4再丢一组,而不是3,4,5各丢一组
- 往大的说,所有数字我们都可以进行错开处理(也就是说题目一旦出现差值为一,我们即可立马输出2这个答案)
- 注意:题目并不会出现相同的数字
代码
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[1001];
int main()
{
int n;
cin>>n;
for(register int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(register int i=1;i<n;i++)
{
if(a[i]-a[i-1]==1)
{
cout<<2;
return 0;
}
}
cout<<1;
return 0;
}