1120: 最值交换 C语言

1120: 最值交换
时间限制: 1 Sec 内存限制: 128 MB
提交: 15458 解决: 6685
[状态] [讨论版] [提交] [命题人:admin]
题目描述
有一个长度为n的整数序列。请写一个程序,先把序列中的最小值与第一个数交换,再把最大值与最后一个数交换。输出转换好的序列。 分别编写两个函数MinIndex()和MaxIndex()来计算最小值下标和最大值下标。
int MinIndex(int a[], int n); //函数返回数组a中最小元素的下标
int MaxIndex(int a[], int n); //函数返回数组a中最大元素的下标
数组元素的输出调用函数PrintArr()。
输入
输入包括两行。
第一行为正整数n(1≤n≤10)。
第二行为n个正整数组成的序列,保证没有重复元素。
输出
输出转换好的序列。数据之间用空格隔开。
样例输入 Copy
5
5 4 1 2 3

样例输出 Copy
1 4 3 2 5

#include <stdio.h>

#define N 10

//函数原型声明
int Minlndex(int a[], int n);
int Maxlndex(int a[], int n);
void PrintArr(int a[], int n);

//最值交换 
int main() {
    
    
	int n, i, a[N];
	int min, max, t1 = 0, t2 = 0; 
	//输入n
	scanf("%d", &n);
	for(i = 0; i < n; i++){
    
    
		//输入n个整数 
		scanf("%d", &a[i]);
	}
	
	//调用函数获取最小值下标
	min = Minlndex(a, n);
	//最小值与第一个数交换
	t1 = a[min];
	a[min] = a[0];
	a[0] = t1;
	
	//调用函数获取最大值下标
	max = Maxlndex(a, n);
	//最大值与最后一个数交换
	t2 = a[max];
	a[max] = a[n - 1];
	a[n - 1] = t2;
	
	//调用函数输出数组元素 
	PrintArr(a, n);
	 
	return 0;
}

//函数返回数组a中最小元素的下标
int Minlndex(int a[], int n){
    
    
	int i, t = 0;
	int min = a[0];
	
	for(i = 0; i < n; i++){
    
    
		if(a[i] < min){
    
    
			min = a[i];
			t = i;
		}
	}
	 return t;
}

//函数返回数组a中最大元素的下标
int Maxlndex(int a[], int n){
    
    
	int i, t = 0;
	int max = a[0];
	for(i = 0; i < n; i++){
    
    
		if(a[i] > max){
    
    
			max = a[i];
			t = i;
		}
	}
	return t; 
}

//输出数组元素
void PrintArr(int a[], int n){
    
    
    int i;
    for(i = 0; i < n - 1; i++){
    
    
        printf("%d ", a[i]);
    } 
    printf("%d", a[n - 1]);
} 

Guess you like

Origin blog.csdn.net/m0_45306379/article/details/120926500