https://www.luogu.org/problemnew/show/P1420
100分做法~(≧▽≦)/~啦啦啦
#include<iostream> #include<cstdio> using namespace std; int a[10001],k,l,n; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=n;i++) { if(a[i]==a[i+1]-1) { k++; } else k=0; if(k>l) { l=k; } } printf("%d",l+1); }
题解上还有一个递归的做法非常好^_^
#include<iostream> #include<cstdio> using namespace std; int a[10001]; int dg(int x) { if(a[x]==a[x+1]-1) return 1+dg(x+1); else return 1; } int main() { int n,k=0,l; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=n-1;i++) { if(dg(i)>k) { k=dg(i); } } printf("%d",k); return 0; }
可以用这个题体会一下递归。。。。。我觉得海星
一开始就想到要用计数器,可是没用好。。。。。~~~~(>_<)~~~~
我一直没弄明白怎么处理不连续的连号。。。
于是我看了题解(^o^)/~
用l保存,始终保存当前遇到的最长连号,如果遇到新的最长连号就更新。
如果中间有中断的连号就将k清零。但在l中已经保留当前最长连号,最后输出l
还有一个我本来以为数据很水,可以骗分的0分做法( ⊙ o ⊙ )啊!
#include<iostream> #include<cstdio> using namespace std; int a[1001]; int main() { int n,k=0; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) { if(a[i]==a[i+1]-1) k++; } printf("%d",k+1); return 0; }
加油啊↖(^ω^)↗
QwQ
Everything will ok!