题目:
样例:
一、最初的错误写法
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
vector<int> x;
int y[1010];
for(int i=0;i<n;i++){
scanf("%d",&y[i]);
x.push_back(y[i]);
}
if(n==1){
printf("%d\n",y[0]);
printf("-1");
}
else{
int max=0;
for(int i=0;i<n;i++){
if(x[i]>max){
max=x[i];
//没有必要把max找出来,后面会排序,直接输出的时候不要输出最后一个元素就行
}
}
printf("%d\n",max);
for(int i=0;i<n;i++){
//这里不能这样写,如果需要删除多个相同值的话,就会越界,因为每删除一个数组大小都在变,i不能一直加到n去
if(x[i]==max){
x.erase(x.begin()+i);
}
}
sort(x.begin(),x.end());
for(int i=0;i<x.size();i++){
printf("%d ",x[i]);
}
printf("\n");
}
}
return 0;
}
如果需要将多个相同值输出并且使用erase不越界的话,可以这样写:
二、修改后
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
vector<int> x;
int y[1010];
for(int i=0;i<n;i++){
scanf("%d",&y[i]);
x.push_back(y[i]);
}
if(n==1){
printf("%d\n",y[0]);
printf("-1\n");
}
else{
sort(x.begin(),x.end());
printf("%d\n",x[x.size()-1]);
for(int i=0;i<x.size()-1;i++){
printf("%d ",x[i]);
}
printf("\n");
}
}
return 0;
}