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("
");
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 }

易错分析:
注意数组下标使用

原文地址:https://www.cnblogs.com/wenzhixin/p/6777709.html