今天晚上的训练赛实在是非常的让人无奈
一道非常简单的题:反正题目大意就是最大的放头上,最小的放后面,然后中间排序。然而……
我提交了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;
}

先排序再换首尾不就好了嘛!!