欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实验7-1-10 交换最小值和最大值 (15分)

程序员文章站 2022-06-07 14:14:44
...

实验7-1-10 交换最小值和最大值 (15分)

本以为两分钟就写得出来,没想到还是花了我5分钟QAQ
有提示就是好,要是复试上机每个测试点也有提示就好了!

#include <stdio.h>

int main(){
    int n,i,max=0,min=0,maxnum=-12220,minnum=12220;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
        if(maxnum<a[i]){
            maxnum = a[i];
            max = i;
        }
        if(minnum>a[i]){
            minnum = a[i];
            min = i;
        }
    }
    int temp;
    if(max==0&&min==n-1){//最大最小值刚好在对方的位置上
        temp = a[max];
        a[max] = a[min];
        a[min] = temp;
    }else if(min==n-1){ //若最小的在最后,就要先交换最小的,再交换最大的否则会混乱
        temp = a[min];
        a[min] = a[0];
        a[0] = temp;
        temp = a[max];
        a[max] = a[n-1];
        a[n-1] = temp;
     }else{            //最大的在最前,或者最大最小都在中间,就先排最大的都可以正确
        temp = a[max];
        a[max] = a[n-1];
        a[n-1] = temp;
        temp = a[min];
        a[min] = a[0];
        a[0] = temp;
    }
    for(i=0;i<n;i++){
            printf("%d ",a[i]);
    }
    
}

我觉得我的方法有点太长了于是看了别人的,发现也可以先找最小的,然后把最小的防盗指定位置,然后再排最大的,就不会出现一系列的问题了,不过代码长度差不多,可能就短一点。

相关标签: PTA练习题