zzuli oj 1120 最值交换

题目描述 :
有一个长度为n的整数序列。请写一个程序,先把序列中的最小值与第一个数交换,再把最大值与最后一个数交换。
输出转换好的序列。 分别编写两个函数MinIndex()和MaxIndex()来计算最小值下标和最大值下标。
intMinIndex(int a[], int n);  //函数返回数组a中最小元素的下标
intMaxIndex(int a[], int n);  //函数返回数组a中最大元素的下标
数组元素的输出调用函数PrintArr()。
输入
输入包括两行。
第一行为正整数n(1≤n≤10)。
第二行为n个正整数组成的序列,保证没有重复元素。
输出
输出转换好的序列。数据之间用空格隔开。
解题思路:
利用打擂台的方法找出最大值,最小值,并标记下标。
代码实现:

 1 #include<stdio.h>
 2 int MinIndex(int a[], int n) 
 3 {
 4  int i,min=0,t=0;
 5  min=a[0];
 6  for(i=1;i<n;i++)
 7  {
 8   if(min>a[i])
 9   {
10    min=a[i];
11    t=i;
12   }
13  }
14  return t;
15  } 
16 int MaxIndex(int a[], int n)
17 {
18  int i,max=0,t=0;
19  max=a[0];
20  for(i=1;i<n;i++)
21  {
22   if(max<a[i])
23   {
24    max=a[i];
25    t=i;
26   }
27  }
28  return t;
29  } 
30 void PrintArr(int a[],int n)
31 {
32  for(int i=0;i<n-1;i++)
33  printf("%d ",a[i]); 
34  printf("%d",a[n-1]);
35 }
36 int main()
37 {
38  int n,i,a[20],min,max,k1,t,k2;
39  scanf("%d",&n);
40  for(i=0;i<n;i++)
41  scanf("%d",&a[i]);
42  min=MinIndex(a,n);
43  k1=a[min];a[min]=a[0];a[0]=k1;
44  max=MaxIndex(a,n);
45  k2=a[max];a[max]=a[n-1];a[n-1]=k2;
46  PrintArr(a,n);
47  return 0;
48 }


易错分析:
1.将题目所需函数写成问题不大,问题主要在于主函数中的运用。
2.注意函数返回值的带入可以直接赋给另一个变量,方便第二次调用。

原文地址:https://www.cnblogs.com/yuanqingwen/p/10392053.html