#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> int get_num[1001]; //题目的意思是首先从中挑选出最大值(可能多个)然后删除一个最大数,再进行排序 void bubblesort(int len) { //get_num的长度 for(int i=0;i<len-1;i++) { for(int j=len-1;j>i;j--) { if(get_num[j-1]>get_num[j]) { int temp; temp = get_num[j]; get_num[j] = get_num[j-1]; get_num[j-1] = temp; } } } } int main() { int n; while(scanf("%d",&n) != EOF) { for(int i=0;i<n;i++) { scanf("%d",&get_num[i]); } int maxnum = get_num[0]; for(int i=0;i<n;i++) { if(get_num[i] > maxnum) { maxnum = get_num[i]; } } int slow=0,fast=0; //双指针用来去除一个最大值 while(fast<n) { if(get_num[fast] != maxnum) { get_num[slow] = get_num[fast]; ++slow; ++fast; } else { if(fast-slow == 1) { //去掉一个了,不用继续去 get_num[slow] = get_num[fast]; ++slow; ++fast; } else { //还没去掉有一个,fast移动slow不移动,错开一个身位然后填空 ++fast; } } } //最终的slow就是新数组的长度 if(slow==0 && get_num[0]==maxnum) { printf("%d\n",maxnum); printf("%d\n",-1); } else { bubblesort(slow); printf("%d\n",maxnum); for(int i=0;i<slow;i++) { printf("%d ",get_num[i]); } printf("\n"); } } return 0; }
其他内容(排序以及找最大值)都很常规,在这里写一个用双指针去最大值的思路,其他大佬没有写,菜鸡补一个