P1420 最长连号 题目描述 输入 n 个正整数,要求输出最长的连号的长度。 连号指从小到大连续自然数。 输入格式 第一行,一个整数 n。 第二行,n 个整数 ai,之间用空格隔开。 输出格式 一个数,最长连号的个数。 输入输出样例 输入 #1 10 3 5 6 2 3 4 5 6 8 9 输出 #1 5 说明/提示 数据规模与约定 对于 100%的数据,保证 1<=n<=10^4 ,1<=ai<=10^9。
题解一:
#include
#include
using namespace std;
int main()
{ int m,length(1),j(0),b[210];
cin>>m; int a[m];
for(int i=0;i<m;i++)
{ cin>>a[i]; //将数据输入到一个数组中 }
for(int i=1;i<m;i++)
{ if(a[i]-a[i-1]==1)
{ length++; //连号长度 }
if(a[i]-a[i-1]!=1||i+1==m)
{ b[j]=length; length=1; //清空length,重新记 j++;
} } sort(b,b+j); //快排
cout<<b[j-1]; //输出最大长度
return 0; }
开辟了两个数组,使用了两次for循环,用了一次快排函数,还须考虑到如果最后两个数差也是1,无法存入b[j]数组,所以附加了条件i+1==m,题解较繁琐。
题解二: #include
using namespace std;
int Num,front,i,next,length=1,max;
int main()
{ cin>>Num>>front; for(i=2;i<=Num;i++)
{ cin>>next; if(next-front==1) length++; //连号长度累加
else length=1; //清空连号长度
if(length>max) { max=length; //存最大值
} front=next; //交换,被减数作为新的减数
}
cout<<max; return 0; }