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 }