• 寻找第二问题


    2019-05-16    20:37:06

    1.问题描述:在实际问题中,通常会遇到许多第二的问题。比如:第二名,第二大和第二小等。在已知的n个数据中找出其中第二小的数据。
    2.根据问题描述,利用数组a[]存储已知数据,定义两个变量,min1和min2,分别用来存储数据中的第一小值和第二小值,对已知数字进行比较之后,便可从中选出第二小的数据,输出即可。此算法的时间复杂度为O(n).
    3.算法说明

    类型 名称 含义
    算法 second2(int a[],int n) 一趟遍历求第二小数据
    形式参数数组 a 存放已知数据
    形式参数变量 n 数据个数
    变量 min1 最小值
    变量 min2 第二小值

    4.代码实现

    #include<stdio.h>
    int second2(int a[],int n)     //second2函数找出第二小值
    {
        int i,min1,min2;
        if(a[0]<a[1])             //若第1个数小于第2个数
        {
        min1=a[0];                //将a[0]赋给最小值
        min2=a[1];                //第a[1]赋给第二小值
       } 
       else {
           min1=a[1]; 
           min2=a[0];
       }
       for(i=2;i<n;i++)                  //从三个数开始遍历完
           if(a[i]<min2)                 //若第i个数小于第二小值
         {
           if(a[i]<min1){                 //并且小于最小值
               min2=min1;                 //将最小值赋给第二小值
               min1=a[i];                 //将第i个数赋给最小值
           }
           else
               min2=a[i];                //否则,若它位于最小值与第二小值中间,将它赋给第二小值
        }
        return (min2);                   //返回第二小值
       } 
     /*主函数输入n个数,存储在a数组中,调用second2函数,找出第二小值。*/ 
     int main(){
        int a[100],i,m;
         printf("请输入数据个数n:");
        scanf(" %d",&m);
        printf("请输入n个已知数据:");
        for(i=0;i<m;i++) 
        scanf("%d",&a[i]);
        printf("第二小的数据为%d",second2(a,m));
    }

    5.运行结果

  • 相关阅读:
    SSM项目使用GoEasy 实现web消息推送服务
    Spring中RedirectAttributes的用法
    Mybatis传递多个参数
    Mysql异常之——Packet for query is too large (10240 > 1024). You can change this value
    记自己在mybatis中设置jdbcType的一个坑
    Linux中各个目录作用
    Linux启动/停止/重启Mysql数据库
    ssm项目跨域访问
    Mybatis异常之——NoSuchMethodException
    Tomcat异常之——启动报错Failed to start component
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/10877852.html
Copyright © 2020-2023  润新知