能简单的时候,别想的太麻烦
今天晚上的训练赛实在是非常的让人无奈
一道非常简单的题:反正题目大意就是最大的放头上,最小的放后面,然后中间排序。然而……
我提交了4次!这是为啥呢?
让我们看看具体的WA的代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[105];
int n,t,i,j=0,m,k=0;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
}
t=a[0];
m=a[0];
for(i=1;i<n;i++){
if(a[i]<t) {t=a[i]; j=i;}
if(a[i]>m){m=a[i]; k=i;}
}
a[j]=a[n-1];
a[k]=a[0];
a[n-1]=t;
a[0]=m;
sort(a+1,a+n-1);
for(i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
因为在排序之前有数据的交换,一旦把某一个最大的值或者最小的值与中间交换,那么那个数就会被留在中间…所以出错
最好的办法是:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[105];
int n,t,i,m;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
}
t=a[0];
m=a[0];
for(i=1;i<n;i++){
if(a[i]<t) {t=a[i];}
if(a[i]>m){m=a[i];}
}
sort(a,a+n);
a[n-1]=t;
a[0]=m;
for(i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
先排序再换首尾不就好了嘛!!