标题 交换最大值与最小值
问题描述 将输入的一系列整数保存在数组中,然后将输入的一系列整数中的最小值与第一个数交 换,然后将最大值与最后一个数交换,最后按照交换后的顺序输出数组中的元素。(注: 已知输入的系列整数最大值和最小值均唯一)
输入说明 输入数据分为两行。 第一行包含了一个整数n,表示整数系列的个数,2 ≤ n ≤ 20。 第二行包含n个整数,整数区间为[0,10000]。
输出说明 按照交换后的顺序输出数组中的元素,中间用空格分隔。
输入样例1 6 5 8 2 5 1 4
输出样例1 1 4 2 5 5 8
输入样例2 6 1 8 2 5 6 9
输出样例2 1 8 2 5 6 9
代码实现:
//基本采用复制的想法
#include <stdio.h>
int main() {
int n, a[10001], b[10001], minn = 1e+9, maxn = 0, minplace, maxplace;
scanf("%d", &n);
for (register int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
if (a[i] < minn) {
minplace = i;//记录最小值的位置
minn = a[i];//记录最小值
}
if (a[i] > maxn) {
maxplace = i;//记录最大值的位置
maxn = a[i];//最大值的位置
}
}
//printf("%d %d\n", minplace, maxplace);//检验点
b[1] = minn;
b[n] = maxn;
b[minplace] = a[1];
b[maxplace] = a[n];//最大最小值按照题目所给条件交换
for (register int i = 2; i < n; i++) {
if (i == minplace || i == maxplace) {
continue;//复制时跳过相关位置
}
b[i] = a[i];
}
for (register int i = 1; i <= n; i++) {
printf("%d ", b[i]);
}
return 0;
}