62,628
社区成员
发帖
与我相关
我的任务
分享题目:在已知的一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大。如:1 3 2 12 1 5 3 10 7 9 8 23 85 43,这些数中被标注红色字体的都是支撑数。将这些支撑数重新排列成一组数:3 12 5 10 9 85,其中被标注蓝色字体的数又是新数列中的支撑数,将蓝色数重新排列后又得到一组新数:12 10,这时再也找不到支撑数了,最后将12 10输出来。
```c++
#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;
constexpr int MST = 1005;
int n, ans[MST], tmp[MST], num, tmpNum;
bool flag = false, inFlag;
int main(int argc, char* argv[]) {
ios::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; ++i)
cin >> ans[i];
tmpNum = n;
int temp = 0;
while (true) {
++temp;
flag = false, num = 0;
for (int i = 1; i < tmpNum - 1; ++i) {
if (ans[i] > ans[i + 1]
&& ans[i] > ans[i - 1])
tmp[num++] = ans[i], flag = true;
}
if (flag) {
for (int i = 0; i < 1005; ++i)
ans[i] = 0;
for (int i = 0; i < num; ++i)
ans[i] = tmp[i];
for (int i = 0; i < 1005; ++i)
tmp[i] = 0;
inFlag = true;
}
if (!flag)
break;
tmpNum = num;
}
if (temp < 2) {
cout << "no";
return 0;
}
for (int i = 0; ans[i] != 0; ++i)
cout << ans[i] << ' ';
return 0;
}
```
#include
#include
#include
using namespace std;
constexpr int MST = 1005;
int n, ans[MST], tmp[MST], num, tmpNum;
bool flag = false, inFlag;
int main(int argc, char* argv[]) {
ios::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; ++i)
cin >> ans[i];
tmpNum = n;
int temp = 0;
while (true) {
++temp;
flag = false, num = 0;
for (int i = 1; i < tmpNum - 1; ++i) {
if (ans[i] > ans[i + 1]
&& ans[i] > ans[i - 1])
tmp[num++] = ans[i], flag = true;
}
if (flag) {
for (int i = 0; i < 1005; ++i)
ans[i] = 0;
for (int i = 0; i < num; ++i)
ans[i] = tmp[i];
for (int i = 0; i < 1005; ++i)
tmp[i] = 0;
inFlag = true;
}
if (!flag)
break;
tmpNum = num;
}
if (temp < 2) {
cout << "no";
return 0;
}
for (int i = 0; ans[i] != 0; ++i)
cout << ans[i] << ' ';
return 0;
}
额,我也不知道
答案呢?