ZZULIOJ题解
1120: 最值交换
题目描述
有一个长度为n的整数序列。请写一个程序,先把序列中的最小值与第一个数交换,再把最大值与最后一个数交换。输出转换好的序列。 分别编写两个函数MinIndex()和MaxIndex()来计算最小值下标和最大值下标。
int MinIndex(int a[], int n); //函数返回数组a中最小元素的下标
int MaxIndex(int a[], int n); //函数返回数组a中最大元素的下标
数组元素的输出调用函数PrintArr()。
输入
输入包括两行。
第一行为正整数n(1≤n≤10)。
第二行为n个正整数组成的序列,保证没有重复元素。
输出
输出转换好的序列。数据之间用空格隔开。
样例输入
5
5 4 1 2 3
样例输出
1 4 3 2 5
这几道题目开始利用函数对数组进行操作了。运用这些题目练习巩固自己的数组熟练程度。同时对排序这些算法有些了解。
代码
#include<stdio.h>
int MinIndex(int a[], int n)
{
int min=a[0],t,x=0;//从第一个数开始往后找
for(int i=1;i<n;i++)
{
if(a[i]<min) min=a[i],x=i;
}
return x;//将最值下标返回
}
int MaxIndex(int a[], int n)
{
int max=a[0],t,x=0;//从第一个数开始往后找
for(int i=1;i<n;i++)
{
if(a[i]>max) max=a[i],x=i;
}
return x;//将最值下标返回
}
void PrintArr(int a[],int n)
{
for(int i=0;i<n;i++)//利用循环实现元素输出
printf("%d ",a[i]);//输出前n个数字
}
int a[1001];//开辟数组a[]的空间
int main()
{
int i,n,x,t;//定义循环变量i和数组元素个数n,以及最值下标记录数x和交换时的中间值t
scanf("%d",&n);//键盘输入n
for(i=0;i<n;i++)//键盘输入数组a[]
scanf("%d",&a[i]);
x=MinIndex(a,n);//用最值函数找最值的下标并交换位置
t=a[0],a[0]=a[x],a[x]=t;
x=MaxIndex(a,n);//用最值函数找最值的下标并交换位置
t=a[n-1],a[n-1]=a[x],a[x]=t;
PrintArr(a,n-1);//输入前n-1个数字
printf("%d",a[n-1]);//输出最后一个数字,没有空格
return 0;//程序正常结束
}