能简单的时候,别想的太麻烦

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

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

全部评论

相关推荐

05-19 15:21
已编辑
华南农业大学 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务