P1420 最长连号题目

269 阅读1分钟

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; }