zoukankan      html  css  js  c++  java
  • 6.2

    一、什么是水仙花数

    水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

    附:其他位数的自幂数名字

    一位自幂数:独身数

    两位自幂数:没有

    三位自幂数:水仙花数

    四位自幂数:四叶玫瑰数

    五位自幂数:五角星数

    六位自幂数:六合数

    七位自幂数:北斗七星数

    八位自幂数:八仙数

    九位自幂数:九九重阳数

    十位自幂数:十全十美数

    常见水仙花数

    水仙花数又称阿姆斯特朗数。

    三位的水仙花数共有4个:153,370,371,407;

    四位的四叶玫瑰数共有3个:1634,8208,9474;

    五位的五角星数共有3个:54748,92727,93084;

    六位的六合数只有1个:548834;

    七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;

    八位的八仙花数共有3个:24678050,24678051,88593477

    ……

    使用高精度计算,可以得到超过int类型上限的水仙花数:

    5: 93084

    5: 92727

    5: 54748

    6: 548834

    7: 9800817

    7: 4210818

    7: 1741725

    7: 9926315

    8: 24678050

    8: 24678051

    8: 88593477

    9: 146511208

    9: 912985153

    9: 472335975

    9: 534494836

    10: 4679307774

    11: 32164049650

    11:40028394225

    11: 42678290603

    11: 49388550606

    11: 32164049651

    11: 94204591914

    11: 44708635679

    11: 82693916578

    14: 28116440335967

    16: 4338281769391370

    16: 4338281769391371

    17: 21897142587612075

    17: 35641594208964132

    17: 35875699062250035

    19: 1517841543307505039

    19: 3289582984443187032

    19: 4929273885928088826

    19: 4498128791164624869

    20: 63105425988599693916

    21: 449177399146038697307

    21: 128468643043731391252

    23: 27907865009977052567814

    23: 35452590104031691935943

    23: 27879694893054074471405

    23: 21887696841122916288858

    24: 174088005938065293023722

    24: 188451485447897896036875

    (为环保起见,24位以上的水仙花数略)

    最大的水仙花数有39位。十进制自然数中的所有水仙花数共有88个。

    用法

    <!DOCTYPE html>

    <html>

        <head>

            <meta charset="utf-8">

        </head>

        <body>

        <script type="text/javascript">

          var a = 0, b = 0, c = 0;

          for (var i = 100; i < 1000; i++)

          {

            a = i % 10;

            b = parseInt(((i / 10) % 10));

            c = parseInt(i / 100);

            if (i === a * a * a + b * b * b + c * c * c)

            {

              document.write('水仙花数: ' + i + '<br/>');

            }

          }

        </script>

        </body>

    </html>

    二、排序

    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。

    分类

    稳定的

    冒泡排序(bubble sort) — O(n^2)

    鸡尾酒排序(Cocktail sort,双向的冒泡排序) — O(n^2)

    插入排序(insertion sort)— O(n^2)

    桶排序(bucket sort)— O(n); 需要 O(k) 额外空间

    计数排序(counting sort) — O(n+k); 需要 O(n+k) 额外空间

    合并排序(merge sort)— O(nlog n); 需要 O(n) 额外空间

    原地合并排序— O(n^2)

    二叉排序树排序 (Binary tree sort) — O(nlog n)期望时间; O(n^2)最坏时间; 需要 O(n) 额外空间

    鸽巢排序(Pigeonhole sort) — O(n+k); 需要 O(k) 额外空间

    基数排序(radix sort)— O(n·k); 需要 O(n) 额外空间

    Gnome 排序— O(n^2)

    图书馆排序— O(nlog n) with high probability,需要 (1+ε)n额外空间

    不稳定的

    选择排序(selection sort)— O(n^2)

    希尔排序(shell sort)— O(nlog n) 如果使用最佳的现在版本

    组合排序— O(nlog n)

    堆排序(heapsort)— O(nlog n)

    平滑排序— O(nlog n)

    快速排序(quicksort)— O(nlog n) 期望时间,O(n^2) 最坏情况; 对于大的、乱数列表一般相信是最快的已知排序

    Introsort— O(nlog n)

    Patience sorting— O(nlog n+ k) 最坏情况时间,需要 额外的 O(n+ k) 空间,也需要找到最长的递增子串行(longest increasing subsequence)

    不实用的

    Bogo排序— O(n× n!) 期望时间,无穷的最坏情况。

    Stupid sort— O(n^3); 递归版本需要 O(n^2) 额外存储器

    珠排序(Bead sort) — O(n) or O(√n),但需要特别的硬件

    Pancake sorting— O(n),但需要特别的硬件

    stooge sort——O(n^2.7)很漂亮但是很耗时

    三、冒泡排序

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

    它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

    原理:

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

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

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

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

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

    JavaScript

    function bubbleSort(arr) {

        var i = arr.length, j;

        var tempExchangVal;

        while (i > 0) {

            for (j = 0; j < i - 1; j++) {

                if (arr[j] > arr[j + 1]) {

                    tempExchangVal = arr[j];

                    arr[j] = arr[j + 1];

                    arr[j + 1] = tempExchangVal;

                }

            }

            i--;

        }

        return arr;

    }

    var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];

    var arrSorted = bubbleSort(arr);

    console.log(arrSorted);

    alert(arrSorted);

    四、选择排序

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

    选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换.

    选择排序是这样实现的:

    1、设数组内存放了n个待排数字,数组下标从1开始,到n结束。

    2、初始化i=1

    3、从数组的第i个元素开始到第n个元素,寻找最小的元素。

    4、将上一步找到的最小元素和第i位元素交换。

    5、i++,直到i=n-1算法结束,否则回到第3步

    选择排序的平均时间复杂度也是O(n^2)的。

    举例:

    564

    比如说这个,我想让它从小到大排序,怎么做呢?

    第一步:从第一位开始找最小的元素,564中4最小,与第一位交换。结果为465

    第二步:从第二位开始找最小的元素,465中5最小,与第二位交换。结果为456

    第三步:i=2,n=3,此时i=n-1,算法结束

    完成

  • 相关阅读:
    python操作redis
    Redis 安装试用
    python操作RabbitMQ
    pycharm快捷键
    各种python使用的坑
    RabbitMQ安装和使用
    Moosefs基本概念
    mesos客户端重新注册导致容器状态为staged
    初学Android 二 创建项目以及目录结构
    【杭电】[5631]Rikka with Graph
  • 原文地址:https://www.cnblogs.com/czfzm/p/6935498.html
Copyright © 2011-2022 走看看