问题:在一个数组A[n]中,找出所有这样的A[i],它比它前面的所有数都要大,比它后面的数都要小
例如:如果A[8] = {1 2 3 4 5 6 7 8},则输出 1 2 3 4 5 6 7 8
如果A[8] = {8 7 6 5 4 3 2 1},则输出为空
例如:如果A[8] = {1 2 3 4 5 6 7 8},则输出 1 2 3 4 5 6 7 8
如果A[8] = {8 7 6 5 4 3 2 1},则输出为空
如果A[8] = {3 5 4 2 1 6 8 7},则输出为6
这里给出四种方法,所有方法中,beg指向数组第一个元素,end指向数组中最后一个元素。
方法一:暴力搜索法
对每一个元素,判断它是否比它前面的数都大,然后判断它是否比它后面的数都小
void ViolentWay(int *beg, int *end){
if(beg == end){
cout<<*beg<<end;
return;
}
int *cur;
for(cur = beg; cur<=end; ++cur){
int *temp;
for(temp = beg; temp<cur; ++temp){<span style="white-space:pre"> </span>//与前面的数进行比较
if(*temp > *cur){
break;
}
}
if(temp != cur){<span style="white-space:pre"> </span>// 如果是中途break出来的,则 temp!=cur ,这时要continue,对下一个数进行判断
continue;
}
for(temp=cur+1; temp<end+1; ++temp){<span style="white-space:pre"> </span>// 与后面的数进行比较
if(*temp < *cur){