本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数 N(≤10),第二行给出 N 个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/13/exam/problems/507
提交:
题解:
#include<stdio.h>
int main(void) {
int N;
scanf("%d", &N);
int array[10];
for (int i = 0; i < N; i++) {
scanf("%d", &array[i]);
}
// 假设第一个数是最大数、最小数,后续比较过程中更新
int minValIndex = 0;
int maxValIndex = 0;
for (int i = 1; i < N; i++) {
minValIndex = array[i] < array[minValIndex] ? i : minValIndex;
maxValIndex = array[i] > array[maxValIndex] ? i : maxValIndex;
}
// 最小数在末尾或最大数在开头,则交换他俩的位置
if (minValIndex == N - 1 || maxValIndex == 0) {
int tmp = array[maxValIndex];
array[maxValIndex] = array[minValIndex];
array[minValIndex] = tmp;
tmp = minValIndex;
minValIndex = maxValIndex;
maxValIndex = tmp;
}
// 最小值与第一个数交换
int tmp = array[minValIndex];
array[minValIndex] = array[0];
array[0] = tmp;
// 最大值与最后一个数交换
tmp = array[maxValIndex];
array[maxValIndex] = array[N - 1];
array[N - 1] = tmp;
for (int i = 0; i < N; i++) {
printf("%d ", array[i]);
}
return 0;
}