本题给定N(不大于20)个元素,求其解右最值问题。所谓“右最值”是指一个序列中某个元素比它的后面所有的元素值都要大的元素,则该元素称为最右值元素。如序列10,9,5,13,2,7,1,8,4,6,3,其最右值元素有13,8,6,3。
输入格式:
第一行输入元素个数;
第二行输入对应的元素。
输出格式:
输出所有的最右值元素,以一个空格隔开,最后也有一个空格。
输入样例:
11
10 9 5 13 2 7 1 8 4 6 3
输出样例:
13 8 6 3
看了两眼题目脑子里蹦出来的第一个做法就是循环+判断
先把元素全部存起来,然后循环套循环挨个处理。
#include<iostream>
int main(){
int n,a[20]; //因为题目里元素不会超过20个,设成20就够了
int i,j,k,flag;
scanf("%d",&n);
for (i=0;i<n;i++){
scanf("%d",&a[i]);
} //储存
for(i=0;i<n;i++){ //开始挨个处理
k=a[i];
flag = 1; //假设是最右值
for(j=i+1;j<n;j++){ //和后面的数字挨个比较
if (k < a[j]) {
flag = 0; //如果比后面的数字小,就不是最右值,flag置零
break;
}
}
if (flag) printf("%d ",k); //如果是最右值,输出
}
}
题目里给定的N比较小,可以用各种方式暴力破解。
等学了高级点的方法再回来改吧(大概)