【c++解决】在已知的一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大。如:1 3 2 12 1 5 3 10 7 9 8 23 85 43,这些数中被标注红色字体的都是支撑数。将这些支撑数重新排列成一组数:3 12 5 10 9 85,其中被标注蓝色字体的数又是新数列中的支撑数,将蓝色数重新排列后又得到一组新数:12 10,这时再也找不到支撑数了,最后将12 10输出来。
1.【题目描述】
在已知的一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大。如:1 3 2 12 1 5 3 10 7 9 8 23 85 43,这些数中被标注红色字体的都是支撑数。将这些支撑数重新排列成一组数:3 12 5 10 9 85,其中被标注蓝色字体的数又是新数列中的支撑数,将蓝色数重新排列后又得到一组新数:12 10,这时再也找不到支撑数了,最后将12 10输出来。
【样例输入】
14
1 3 2 12 1 5 3 10 7 9 8 23 85 43
【样例输出】
12 10
2.【代码】
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
int main() {
int n, a[10001], b[10001],sum=0;
scanf("%d", &n);
for(int i=0;i<n;i++){
scanf("%d", &a[i]);
}
for(int i=1;i<n-1;i++)
{
if(a[i]>a[i+1]&&a[i]>a[i-1])
{
sum++;
}
}
if(sum==0)
{
cout<<"no";
return 0;
}
while(1){
sum=0;
for(int i=1;i<n-1;i++){
if(a[i]>a[i+1]&&a[i]>a[i-1]){
b[sum++]=a[i];
}
}
if(sum==0){
break;
}
n=sum;
for(int k=0;k<sum;k++){
a[k]=b[k];
}
}
for(int i=0;i<n;i++){
printf("%d ", a[i]);
}
return 0;
}
仅供参考!