实验7-1-10 交换最小值和最大值 (15分)
程序员文章站
2022-06-07 14:14:44
...
本以为两分钟就写得出来,没想到还是花了我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]);
}
}
我觉得我的方法有点太长了于是看了别人的,发现也可以先找最小的,然后把最小的防盗指定位置,然后再排最大的,就不会出现一系列的问题了,不过代码长度差不多,可能就短一点。