• 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.注意函数返回值的带入可以直接赋给另一个变量,方便第二次调用。

  • 相关阅读:
    两种存储思路
    越来越浅
    我了解的前端史
    关于称赞小孩
    怎么写递归
    Python笔记(十八):协程asyncio
    网络协议笔记(一):HTTP协议基础知识
    Linux笔记(三):常用命令
    算法笔记(九):二分查找
    数据结构笔记(二):栈、队列
  • 原文地址:https://www.cnblogs.com/yuanqingwen/p/10392053.html
Copyright © 2020-2023  润新知