7-5 交换最小值和最大值 (15分) (C语言 + 详细注释)

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。

输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8 

#include<stdio.h>

void swap(int v[], int i, int j);

int main() {
    int a[15], i, n, mini, maxi;
    scanf("%d", &n);

    mini = maxi = 0;
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        if (a[i] < a[mini]) 
            mini = i;               //找到最小值的下标
         if (a[i] > a[maxi]) 
            maxi = i;              //找到最大值的下标
    }
    swap(a, 0, mini);
    
    if(!maxi)              // 防止第一个数就是最大的,而第一次交换的时候把其交换到了mini的位置
        maxi = mini;
  
    swap(a, maxi, n - 1);      

    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
        
    return 0;
}

void swap(int v[], int i, int j) {
    int temp = v[i];
    v[i] = v[j];
    v[j] = temp;
}

发布了30 篇原创文章 · 获赞 10 · 访问量 404

猜你喜欢

转载自blog.csdn.net/qq_45472866/article/details/104056454