本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
思路:先遍历数组找到最大最小元素,然后将其下标分别赋给max和min,遍历完数组后,在循环外进行元素的交换,如果把交换放在循环里,当数组内有一个比一开始定义的max大时,会多进行交换,虽然最后结果输出是交换了最大的那个元素,但是会PTA报错。
解决方法就是:先把数组内最大最小找到再交换。
#include<stdio.h>
int main()
{
int i, n,max , min, tmp = 0;
int str[10];
scanf("%d", &n);
for (i = 0; i < n; i++){
scanf("%d", &str[i]);
}
min = max = 0;
for (i = 0; i < n; i++){//遍历数组,寻找最小值
if (str[i] <= str[min]){//将最小值下标赋给min
min = i;
}
}
tmp = str[0];//交换最小值和数组首元素
str[0] = str[min];
str[min] = tmp;
for (i = 0; i < n; i++)//遍历数组,寻找最大值
{
if (str[i] >= str[max]) {//将最大值下标赋