题目描述
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
样例输入 Copy
5 8 2 5 1 4
样例输出 Copy
1 2 5 4 8
#include<stdio.h>
int main(void){
int N,max,min,i,j,first,final;//定义first和final在交换值时候用来储存
int a[11];//定义一个数组
scanf("%d",&N);//"%d"和"%d\n"结果输出都一样 ,前者更简洁
for(i=0;i<N;i++){
scanf("%d",&a[i]);//注意是"%d"不是"%d ",如果是后者意味着把空格也赋值给a[i]
}
max=min=a[0];//注意在循环之前给max和min赋值a[0]
for(i=0;i<N;i++){
if(a[i]<=min){//也可以为 a[i]<min,两个结果一样
min=a[i];
j=i;//记得设置j储存最小值的情况
}
}
first=a[0];
a[0]=min;
a[j]=first;
for(i=0;i<N;i++){//也可以为 a[i]<max,两个结果一样
if(a[i]>=max){
max=a[i];
j=i;//记得设置j储存最大值的情况
}
}
final=max;
a[j]=a[N-1];
a[N-1]=final;
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
return 0;
}
注意先交换最小值和第一个数,再交换最大值和最后一个数。先交换可能会破坏最大值的位置,所以不能先求出最大最小值的位置再交换。要先求最小值位置-交换最小值和xxx-求出最大值位置-交换最大值和xxx。