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

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

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

全部评论

相关推荐

面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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