题解 | #特殊排序# 王道 机试指南 第二章排序
特殊排序
https://www.nowcoder.com/practice/57f0f528bff149be9580af66f6292430
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n;
int data[1001];
int i;
while (scanf("%d", &n) != EOF) {
for (i = 0; i < n; i++) {
scanf("%d", &data[i]); //输入数据
}
//找最大值并剔除
int max = data[0];
int k = 0; //记录最大值坐标,初始值0
for (int i = 0; i < n; i++) {
if (max < data[i]) {
max = data[i];
k = i; //如果出现更大的值,记录坐标
}
}
//已经找到最大值max和对应的坐标
//输出最大值
printf("%d\n",max);
// 在数组中,删除该元素,该元素后面的元素前移1个
for (i = k; i <= n - 2; i++) {
data[i] = data[i + 1];
//最后一个是data[n-2]=data[n-1]
}//删除了最后一个元素,现在的长度是n-1
sort(data, data + n - 1); //升序排列
if(n==1)//刚开始输入的数据只有1个,删除1个最大值,就没有数据了
printf("-1");
for (i = 0; i < n - 1; i++)
printf("%d ", data[i]);
}
return 0;
}
习题3.1 | 特殊排序(华中科技大学复试上机题) |
