1 题目
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
2 分析
本题的关键是找出数组的最大值与最小值的位置,找出位置后与数组相应的位置交换即可
3 实现
#include <stdio.h>
#define N 10 // 假定数组大小为10
int main()
{
int arr[N] = {4, 3, 1, 7, 8, 6, 0, 2, 9, 5};
// 输出数组元素
printf("交换前数组元素的排列为:");
for (int i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
int maxIndex = 0; // 保存最大的数的数组下标,初始为0
int minIndex = 0; // 保存最小的数的数组下标,初始为0
for (int i = 1; i < N; i++) {
if (arr[maxIndex] < arr[i]) {
maxIndex = i; // 若i位置的值比最大值还大,就令i为最大值位置
}
if (arr[minIndex] > arr[i]) {
minIndex = i; // 若i位置的值比最小值还小,就令i为最小值位置
}
}
// 最大的与第一个元素交换
int t = arr[0];
arr[0] = arr[maxIndex];
arr[maxIndex] = arr[0];
// 最小的与第后一个元素交换
t = arr[N - 1];
arr[N - 1] = arr[minIndex];
arr[minIndex] = arr[N - 1];
// 输出数组元素
printf("\n交换后数组元素的排列为:");
for (int i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
}
4 运行结果
交换前数组元素的排列为:4 3 1 7 8 6 0 2 9 5
交换后数组元素的排列为:9 3 1 7 8 6 0 2 9 0