P1420 最长连号

P1420   最长连号

 本题是一道常见的模拟题目

 具体解题步骤如下:

已经输入给出数据个数,所以就以此做循环条件,每次输入一个数,判断是否为上一个数加一(连续自然数)。

1,如果是,则临时计数(sum)加一,

2,如果不是(断了),则将临时计数(sum)清零。

在此期间若临时计数超过答案(初始值为1),则把临时计数的值赋给答案,这样临时计数清零后可保留目前最长的连续数个数。最终每个数据都判断完成后输出答案

但要注意的是,计数时包括第一个数,所以临时计数和答案的初值都应为1,这样计数才会算上第一个,清零时其实是清“一”

代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,a[10000]={},i,sum=0,maxn=0;
 6     cin>>n;
 7     for(i=0;i<n;i++)
 8     {
 9         cin>>a[i];
10     }
11     for(int i=0;i<n;i++)
12     {
13         if(a[i]+1==a[i+1])
14             sum++;
15         else sum=0;
16         if(sum>maxn)
17             maxn=sum;
18     } 
19     cout<<++maxn;
20     return 0;
21 } 

本题比较简单,下面拓展一下排序与去重的代码。(方便使用)

 1 #include <iostream>
 2 #include <algorithm>   // sort(), unique()
 3 #include <functional>  // less<int>()
 4 using namespace std;
 5 int main()
 6 {
 7     int p,i;
 8     cin>>p;
 9     int a[p];
10     for(i=0;i<p;i++)
11         cin>>a[i];
12     sort(a,a+p,less<int>());  // 排序
13     int n=unique(a,a+p)-a;   // 去重
14     for (i=0;i<n;i++)
15         cout<<a[i]<<" ";
16 }
原文地址:https://www.cnblogs.com/Kyriech-Francis/p/Answer_P1420.html