题目来源:
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 }
易错分析:
注意数组下标使用
来源:https://www.cnblogs.com/wenzhixin/p/6777709.html