[PTA]实验7-1-10 交换最小值和最大值
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA]实验7-1-10 交换最小值和最大值相关的知识,希望对你有一定的参考价值。
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
- 提交结果:
- 源码:
#include<stdio.h>
int main(void)
{
int N;
int array[10];
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%d", &array[i]);
}
// 先假设第一个数是最大数、最小数,后续比较过程中更新其值
minIndex = maxIndex = 0;
for (int i = 0; i < N; i++)
{
// 后续输入过程中存在比max大的数
if (array[i] > array[maxIndex])
{
maxIndex = i;
}
// 后续输入过程中存在比min小的数
if (array[i] < array[minIndex])
{
minIndex = i;
}
}
// 分情况讨论
if (minIndex == 0) // 最小的数在开头,则将最大的数交换到末尾
{
int temp = array[N - 1];
array[N - 1] = array[maxIndex];
array[maxIndex] = temp;
}
else if (maxIndex == N - 1) // 最大的数在末尾,则将最小的数交换到开头
{
int temp = array[0];
array[0] = array[minIndex];
array[minIndex] = temp;
}
else if (minIndex == N - 1) // 最小的数在末尾,先将最大的数换到末尾,再将最小的数换到开头
{
// 将最大的数与最小的数交换
int temp = array[N - 1];
array[N - 1] = array[maxIndex];
array[maxIndex] = temp;
minIndex = maxIndex;
// 将最小的数交换到开头
temp = array[minIndex];
array[minIndex] = array[0];
array[0] = temp;
}
else if (maxIndex == 0) // 最大的数在开头,先将最小的数换到开头,再将最大的数换到最后
{
// 将最小的数与最大的数交换
int temp = array[0];
array[0] = array[minIndex];
array[minIndex] = temp;
maxIndex = minIndex;
// 将最大的数交换到末尾
temp = array[N - 1];
array[N - 1] = array[maxIndex];
array[maxIndex] = temp;
}
else // 最大最小数均在中间,直接将最大数交换到末尾,再将最小数交换到开头
{
// 最小数交换到开头
int temp = array[0];
array[0] = array[minIndex];
array[minIndex] = temp;
// 最大数交换到末尾
temp = array[N - 1];
array[N - 1] = array[maxIndex];
array[maxIndex] = temp;
}
for (int i = 0; i < N; i++)
{
printf("%d ", array[i]);
}
return 0;
}
以上是关于[PTA]实验7-1-10 交换最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章