题解 | #特殊排序# 王道 机试指南 第二章排序
特殊排序
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 | 特殊排序(华中科技大学复试上机题) |