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]);
}