1120 最值交换
题目来源:
https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1120
Description
有一个长度为n的整数序列。请写一个程序,先把序列中的最小值与第一个数交换,再把最大值与最后一个数交换。输出转换好的序列。 分别编写两个函数MinIndex()和MaxIndex()来计算最小值下标和最大值下标。
int MinIndex(int a[], int n); //函数返回数组a中最小元素的下标
int MaxIndex(int a[], int n); //函数返回数组a中最大元素的下标
数组元素的输出调用函数PrintArr()。
Input
输入包括两行。
第一行为正整数n(1≤n≤10)。
第二行为n个正整数组成的序列,保证没有重复元素。
Output
输出转换好的序列。数据之间用空格隔开。
Sample Input
5
5 4 1 2 3
Sample Output
1 4 3 2 5
题意描述:
输入数组元素的个数n及n个元素
交换最大值和尾元素的位置,交换最小值和首元素的位置后输出新数组
解题思路:
调用MinIndex()函数返回最小值的下标,再调用MaxIndex()函数返回最大值的下标,交换即可
程序代码:
1 #include<stdio.h> 2 int MaxIndex(int a[],int n); 3 int MinIndex(int a[],int n); 4 void PrintArr(int a[],int n); 5 int main() 6 { 7 int n,i,a[20],t,p,q; 8 while(scanf("%d",&n) != EOF) 9 { 10 for(i=0;i<n;i++) 11 scanf("%d",&a[i]); 12 q=MinIndex(a,n); 13 t=a[0]; 14 a[0]=a[q]; 15 a[q]=t; 16 17 p=MaxIndex(a,n); 18 t=a[n-1]; 19 a[n-1]=a[p]; 20 a[p]=t; 21 22 PrintArr(a,n); 23 printf("\n"); 24 } 25 return 0; 26 } 27 int MaxIndex(int a[],int n) 28 { 29 int i,max=0,k=0; 30 for(i=0;i<n;i++) 31 { 32 if(a[i]>max) 33 { 34 max=a[i]; 35 k=i; 36 } 37 } 38 return k; 39 } 40 int MinIndex(int a[],int n) 41 { 42 int i,min=99999999,k=0; 43 for(i=0;i<n;i++) 44 { 45 if(a[i]<min) 46 { 47 min=a[i]; 48 k=i; 49 } 50 } 51 return k; 52 } 53 void PrintArr(int a[],int n) 54 { 55 int i; 56 for(i=0;i<n;i++) 57 { 58 if(i==0) 59 printf("%d",a[i]); 60 else 61 printf(" %d",a[i]); 62 } 63 }
易错分析:
注意数组下标使用
欢迎交流,共同进步——