/* A 山谷 这题的关键在于判山谷和山峰. 考验:自己的代码控制能力.自己在这道题上浪费了很长时间. 反思:自己的代码能力还是不够成熟,不要因为题目简单就不去实现. 这会让你自己付出代价的. */ #include<iostream> using namespace std; const int Max=10005; int main() { int N; while(cin>>N) { int a[Max]; for(int i=1;i<=N;i++) cin>>a[i]; int x,y,num=0,GD=a[1]; for(x=1;x<=N;x++) { for(y=x;y<N;y++)//在这儿错了一次,返回的是WA. //为什么不是RE呢?因为你越界访问在定义范围之内. { if(GD>a[y]&&a[y]<a[y+1])//a[y]为谷峰GD为谷底. {num++;break;} else if(GD<=a[y]) GD=a[y]; } GD=a[y]; x=y; } cout<<num<<endl; } } //输出方式改变了一下,时间上差了一个倍数. //说以有一些卡数据的题目,还是用这种方法比较好. #include<stdio.h> #define Max 10005 int main() { int N; while(~scanf("%d",&N)) { int a[Max]; for(int i=0;i<N;i++) scanf("%d",&a[i]); int x,y,num=0,GD=a[0]; for(x=1;x<N;x++) { for(y=x;y<N-1;y++) { if(GD>a[y]&&a[y]<a[y+1]) {num++;break;} else if(GD<=a[y]) GD=a[y]; } GD=a[y]; x=y; } printf("%d\n",num); } }