• C语言入门8-数组-基本算法


    一、          什么是数组

    数组就是具有相同数据类型的有序集合。

    分为一维数组、二维数组及多维数组。

    一维数组就是用一个下标定义的数组

    二维数组就是用二个下标定义的数组

    我们把具有三个下标及三个下标以上的数组称为多维数组。

    二、          数组

    1. 1.       一维数组的定义

    (1) 一维数组的定义的形式始下:

    类型说明符  数组名[常量表达式];

    Int         a     [10];

    定义数组时,数组的大小必须确定

    (2) 对于一维数组的定义说明如下:

    数组名应符合标识符的命名规则,正式应用中第一个字符应为英文

    用方括号将常量表达式括起来

    常量表达式定义了数组元素的个数

    数组下标从0开始。如果定义5个元素,是从第0个元素至第4个元素。

    常量表达式中不允许出现变量。 

    1. 2.       数组的初始化

    (1) 对数组元素赋初始化可以用以下方法实现

    ①         在定义数组时对数组元素赋以初值

    ②         可以只给一部分元素赋值:例始

    int a[10]={1,2,3,4};在语句只给了前4个元素初值,后面6个默认以0补齐

    ③         如果想一个数组里的全部元素值为0;可以写成

    int a[10]={0};或int a[10]={0,0,0,0,0,0,0,0,0,0};

    ④         在数组赋初值时可以不指定长度,长度默认就是后面元素的个数

    例  int a[]={1,2,2,3,4};数组默认长度为4.

    整型数组排序

    一、          什么是排序

    排序是计算机内经常进行的一种操作,

    其目的是将一组"无序"的记录序列调整为"有序"的记录序列。

    二、          排序的方法

    排序的方法有很多:快速排序、希尔排序、堆排序直接选择排序,基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序

    排序是一个基本功,这里先介绍一种最简单和实用的方法:冒泡排序法。

    1. 1.       冒泡排序法

    现在给大家一个来思考,给你10个质量不同的塑料小球,让你从轻到重依次分开,不用能用称重的方法解决,你能想到用什么办法吗?

    冒泡排序(BubbleSort)的基本概念是:

    依次比较相邻的两个数,将小数放在前面,·大数放在后面。

    即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。

    然后比较第2个数和第3个数,将小数放前,大数放后,

    如此继续,直至比较最后两个数,将小数放前,大数放后。

     

    1. 2.       冒泡排序的算法设计原理

    冒泡排序算法的运作如下:(从后往前)

    (1)    比较相邻的元素。如果第一个比第二个大,就交换他们两个。

    (2)    对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

    (3)    针对所有的元素重复以上的步骤,除了最后一个。

    (4)    持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    (1) 参考代码如下:

    /* 从低到高排序 */

    #include "stdio.h"

    void main()

    {   int a[6] = { 6, 2, 4, 1, 5, 9 };

        int t;

        int i,j;     // i是外层循环  j是内层循环

    for (i = 1; i < 6; i++)

    {

        for (j = 0; j <6-i ; j++)

        {

            if (a[j] > a[j+1])

            {

                t = a[j];

                a[j] = a[j+1];

                a[j+1] = t;

            }

        }

          }

    printf("从低到高依次为 ");

    for(i=0;i<6;i++)

    printf("%d ",a[i]);

    }                                       

     

     算法—穷举的实现

    一、     穷举

    穷举法(Exhaustion),也称枚举法(Enumeration):列举所有可能,逐一试探 。

    1、穷举法的基本思想:

    根据问题的  部分已知条件  预估  解的范围

    在此范围内  对所有可能的情况   进行逐一验证

    2、若某个情况符合题目的全部条件,则该情况为本问题的一个解

    若全部情况的验证结果均不符合题目的全部条件,则说明该题无解

    直到找到满足已知条件的解为止

    3、穷举法  求解问题的  两个基本要素   (多选题 )

    (1)确定穷举对象和穷举范围

    影响算法的时间复杂度、 循环结构实现

    (2)确定判定条件

    符合什么条件  才能  成为问题的答案、分支结构实现

    4、穷举法的实际应用,常用于密码的破译 , 也称蛮力法(Brute Force),或暴力搜索法

     (1)穷举法优点:算法简单,逻辑清晰,易于理解,程序易于实现 

    (2)缺点:运算量较大、只适合于“有几种组合”、“是否存在”、求解不定方程 等类型的问题求解

    二、     鸡兔同笼  参考代码如下:

    /* Note:Your choice is C IDE */
    
    #include "stdio.h"
    
    void main()
    
    {
    
    int i;// 鸡的只数
    
        for(i=1;  i<98;  i++)
    
        {
    
              if(2*i+(98-i)*4==386)
    
              {
    
                     printf("鸡%d头
    兔%d只
    ",i,98-i) ;
    
              } 
    
             
    
        }
    
     }

    三、     ACM案例28水仙花数

    水仙花数定义  各个位数立方和等于它本身的三位数。

    /* Note:Your choice is C IDE */
    
    #include "stdio.h"
    
    void main()
    
    {
    
        int num;//定义数变量
    
        int g,s,b;//定义个、十、百位变量名
    
        printf("水仙共数有:");
    
        for(num=100;num<=999;num++)//穷举测试
    
        {
    
              g=num%10;      //个位数
    
              s=num/10%10;   //十位数
    
              b=num/100;     //百位数
    
              if(g*g*g+s*s*s+b*b*b==num)   //判断条件
    
              {
    
                     printf("%d	",num);
    
              }       
    
        }   
    
    }
  • 相关阅读:
    面试题58 二叉树的下一个结点
    面试题57 删除链表中重复的结点
    面试题56 链表中环的入口结点
    面试题55 字符流中第一个不重复的字符
    面试题54 表示数值的字符串
    面试题50 树中两个结点的最低公共祖先
    面试题53 正则表达式匹配
    面试题52 构建乘积数组
    面试题51 数组中重复的数字
    Qt链接库出错version Qt_5 not defined
  • 原文地址:https://www.cnblogs.com/TimVerion/p/11188398.html
Copyright © 2020-2023  润新知