目錄
之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流!
首頁 web前端 js教程 分享一個初級腳本演算法實例

分享一個初級腳本演算法實例

Jun 23, 2017 am 09:51 AM
初級 挑戰 演算法 程式設計 腳本

之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流!

1、翻转字符串

先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。

        function reverseString(str) {var str2 = '';for(var i=str.length-1;i>=0;i--){
                str2 += str[i];
            }return str2;
        }function reverseString(str){var strArray = str.split('');
            strArray.reverse();
            str = strArray.join('');return str
        }
登入後複製

 

2、计算一个整数的阶乘

如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。

        function factorialize(num) {var sum = 1;for(var i=num;i>0;i--){
                sum *= i;
            }

            console.log(sum);return sum;
        }function factorialize(num) {if(num ==1){return 1;
            }else{return arguments.callee(num-1)*num;
            }

        }
登入後複製

 

3、回文算法

如果给定的字符串是回文,返回true,反之,返回false

如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是(回文)。

注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。

            function palindrome(str) {var arr = [];
                str = str.toLowerCase();                for(var i=0;i<str.length;i++){// 在小写字母的Unicode的范围内或者在数字的Unicode范围内if((str.charCodeAt(i)<=122 && str.charCodeAt(i)>=97) || 
                    (str.charCodeAt(i)<=57 && str.charCodeAt(i)>=48)){
                        arr.push(str[i]);
                    }
                }//只需要判断数组一半的次数就全部比较完了,不必再浪费时间了for(var i=0;i<Math.ceil(arr.length/2);i++) {if(arr[i] !== arr[arr.length-i-1]){return false;
                    }
                }return true;
                
            }// 需要手动添加特殊字符function palindrome(str){var str1,str2;
                str = str.toLowerCase();
                str = str.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\&#39;|\,|\<|\.|\>|\/|\?]/g,"");

                str1 = str.split('');
                str1.reverse();
                str2 = str1.join('');if(str === str2){return true}else{return false;
                }


            }
登入後複製

 

4、寻找最长的单词算法

找到提供的句子中最长的单词,并计算它的长度。

函数的返回值应该是一个数字。

        // 利用charCodeAt()方法判断是不是一个单词,并记录单词长度,最后获得最长的单词长度function findLongestWord(str) {var num = 0,
                max = 0;for (var i = 0; i < str.length; i++) {if (str.charCodeAt(i) !== 32) {
                    num++;
                } else {// 注意:如果最后一个字母不是空格,不会比较最后一个单词的长度max = num > max ? num : max;
                    num = 0;
                }
            }// 比较最后一个单词的长度max = num > max ? num : max;return max;
        }// 利用split()方法将字符串分成每个单词组成的数组,取得其中最长的长度function findLongestWord(str){           var max = 0;           var arr = str.split(' ');           for(var i=0;i<arr.length;i++){
               max = arr[i].length>max?arr[i].length:max;
           }           return max;

        }
登入後複製

 

5、设置首字母大写算法

确保字符串的每个单词首字母都大写,其余部分小写。

像'the'和'of'这样的连接符同理。

        //将字符串用split()方法转为数组,并用数组中的每个项的首字母的大写和这个项剩余的字符拼接,最后转为字符串function titleCase(str) {var arr,upChar;
            str = str.toLowerCase();
            arr = str.split(' ');            for(var i=0;i<arr.length;i++){
               upChar =  arr[i][0].toUpperCase() ;
               arr[i] = upChar + arr[i].slice(1);
            }

            arr = arr.join(&#39; &#39;);return arr;
        }function titleCase(str){var upChar,
                toUper = false;for(var i=0;i<str.length;i++){if((str.charCodeAt(i) == 32)){
                    toUper = true;
                }else if(toUper){
                    upChar= str[i].toUpperCase();
                    console.log(upChar)
                    console.log(str[i]);
                    str[i] = upChar;
                    toUper = false;
                }
            }return str;
        }
登入後複製

6、寻找数组中的最大值算法

右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。

        function largestOfFour(arr) {var max = 0,
                result = [];for(var i=0;i<arr.length;i++){for(var j=0;j<arr[i].length;j++){var n = arr[i][j];
                    max = n>max?n:max;
                }
                result.push(max);
                max = 0;
            }return result;
        }
登入後複製

 

7、确认末尾字符算法

检查一个字符串(str)是否以指定的字符串(target)结尾。

如果是,返回true;如果不是,返回false。

        // 从后开始比较function confirmEnding(str, target) {for (var i = 0; i < target.length; i++) {if (str[str.length - 1 - i] != target[target.length - 1 - i]) {return false;
                }
            }return true;
        }
登入後複製

8、重复操作算法

重要的事情说3遍!

重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。

        function repeat(str, num) {var result = &#39;&#39;;if(num<0){return &#39;&#39;;
            }else{for(var i=0;i<num;i++){
                    result += str;
                }
            }return result;
        }
登入後複製

9、字符串截取算法

用瑞兹来截断对面的退路!

截断一个字符串!

如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。

切记,插入到字符串尾部的三个点号也会计入字符串的长度。

但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。

        function truncate(str, num) {var result = &#39;&#39;;var strArr = str.split(&#39;&#39;);if(num<=3){
                result = str.slice(0,num) +&#39;...&#39;;
            }else if(str.length>num){
                result = str.slice(0,num-3) + '...';
            }else{
                result = str;
            }return result;
        }
登入後複製

 

10、数组分割算法

猴子吃香蕉可是掰成好几段来吃哦!

把一个数组arr按照指定的数组大小size分割成若干个数组块。

        function chunk(arr, size) {var result = [];var a = [];for(var i=0;i<arr.length;i++){
                a.push(arr[i]);if( ((i+1)%size == 0) || (i == arr.length-1)){
                    result.push(a);
                    
                    a = [];
                }
            }return result;
        }
登入後複製

11、数组截断算法

打不死的小强!

返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。

        function slasher(arr, howMany) {           var result = [];           for(var i=howMany;i<arr.length;i++){
                result.push(arr[i]);
           }           return result;
        }
登入後複製

12、数组查询算法

蛤蟆可以吃队友,也可以吃对手。

如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。

举例,["hello", "Hello"]应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。

["hello", "hey"]应该返回false,因为字符串"hello"并不包含字符"y"。

["Alien", "line"]应该返回true,因为"line"中所有字符都可以在"Alien"找到。

    function mutation(arr) {var arr1 = arr[0].toLowerCase();
        console.log(arr1)var arr2 = arr[1].toLowerCase();for(var i=0;i<arr[1].length;i++){                            if(arr1.indexOf(arr2[i]) == -1){return false;
            }
        }return true;
    }
登入後複製

13、删除数组中特定值

真假美猴王!

删除数组中的所有假值。

在JavaScript中,假值有falsenull0""undefinedNaN

       function bouncer(arr) {// Don&#39;t show a false ID to this bouncer.for(var i=0;i<arr.length;i++){if(!arr[i] == true){
                    arr.splice(i,1);
                    i--;
                }
            }return arr;
        }
登入後複製

14、去除数组中任意多个值

金克斯的迫击炮!

实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。

        function destroyer(arr) {// Remove all the valuesvar arr = arguments[0];
            console.log(arr[1]);var data = Array.prototype.slice.call(arguments,1);for(var j=0;j<data.length;j++){for(var i=0;i<arr.length;i++){if(arr[i] == data[j]){
                        arr.splice(i,1);
                        i--;
                    }
                }
            }return arr;
        }
登入後複製

15、数组排序并插入值

我身在何处?

先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1

同理,where([20,3,5], 19) 应该返回 2。因为数组会先排序为 [3,5,20]19插入到数组[3,5,20]后变成[3,5,19,20],而19对应的索引值就是2

        function where(arr, num) {
            arr.sort(function(a,b){return a - b;
            });for(var i=0;i<arr.length;i++){if(num > arr[i] && num < arr[i+1]){return i+1;
                }else if(num == arr[i]){return i;
                }else if(num >arr[arr.length-1]){return arr.length;
                }

            }

        }
登入後複製

 

16、位移密码算法

让上帝的归上帝,凯撒的归凯撒。

下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。

移位密码也就是密码中的字母会按照指定的数量来做移位。

一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔'O',以此类推。

写一个ROT13函数,实现输入加密字符串,输出解密字符串。

所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。

            function rot13(str) { // LBH QVQ VG!var result = [];for(var i=0;i<str.length;i++){if(str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90){var code = str.charCodeAt(i) + 13;if(code>90){
                            code = str.charCodeAt(i) + 13 - 26;
                        }
                        
                        result.push(String.fromCharCode(code));
                    }else{
                        result.push(str[i]);
                    }
                }return result.join("");
            }
登入後複製

 

以上是分享一個初級腳本演算法實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
使用C++實現機器學習演算法:常見挑戰及解決方案 使用C++實現機器學習演算法:常見挑戰及解決方案 Jun 03, 2024 pm 01:25 PM

C++中機器學習演算法面臨的常見挑戰包括記憶體管理、多執行緒、效能最佳化和可維護性。解決方案包括使用智慧指標、現代線程庫、SIMD指令和第三方庫,並遵循程式碼風格指南和使用自動化工具。實作案例展示如何利用Eigen函式庫實現線性迴歸演算法,有效地管理記憶體和使用高效能矩陣操作。

改進的檢測演算法:用於高解析度光學遙感影像目標檢測 改進的檢測演算法:用於高解析度光學遙感影像目標檢測 Jun 06, 2024 pm 12:33 PM

01前景概要目前,難以在檢測效率和檢測結果之間取得適當的平衡。我們研究了一種用於高解析度光學遙感影像中目標偵測的增強YOLOv5演算法,利用多層特徵金字塔、多重偵測頭策略和混合注意力模組來提高光學遙感影像的目標偵測網路的效果。根據SIMD資料集,新演算法的mAP比YOLOv5好2.2%,比YOLOX好8.48%,在偵測結果和速度之間達到了更好的平衡。 02背景&動機隨著遠感技術的快速發展,高解析度光學遠感影像已被用於描述地球表面的許多物體,包括飛機、汽車、建築物等。目標檢測在遠感影像的解釋中

演算法在 58 畫像平台建置中的應用 演算法在 58 畫像平台建置中的應用 May 09, 2024 am 09:01 AM

一、58畫像平台建置背景首先和大家分享下58畫像平台的建造背景。 1.傳統的畫像平台傳統的想法已經不夠,建立用戶畫像平台依賴數據倉儲建模能力,整合多業務線數據,建構準確的用戶畫像;還需要數據挖掘,理解用戶行為、興趣和需求,提供演算法側的能力;最後,還需要具備數據平台能力,有效率地儲存、查詢和共享用戶畫像數據,提供畫像服務。業務自建畫像平台和中台類型畫像平台主要區別在於,業務自建畫像平台服務單條業務線,按需定制;中台平台服務多條業務線,建模複雜,提供更為通用的能力。 2.58中台畫像建構的背景58的使用者畫像

劃重點! !因果推斷兩大演算法框架解析 劃重點! !因果推斷兩大演算法框架解析 Jun 04, 2024 pm 04:45 PM

一、整體框架主要任務可分為三類。首先是因果結構的發現,即從資料中辨識出變數之間的因果關係。其次是因果效應的估計,即從資料推斷一個變數對另一個變數的影響程度。需要注意的是,這種影響並非指相對性,而是指在對一個變數進行幹預時,另一個變數的數值或分佈如何變化。最後是校正偏差,因為在許多任務中,各種因素可能導致開發樣本和應用樣本的分佈不同。在這種情況下,因果推論可能有助於我們進行校正偏差。這些功能適用於多種場景,其中最典型的是決策場景。透過因果推斷,可以了解不同使用者對我們的決策行為的反應。其次,在工業

釋放你內心的程式設計師:C 絕對初學者 釋放你內心的程式設計師:C 絕對初學者 Oct 11, 2024 pm 03:50 PM

C語言是初學者學習程式設計的理想選擇,其優點包括效率、多功能性和可移植性。學習C語言需要:安裝C編譯器(如MinGW或Cygwin)了解變數、資料型別、條件語句和迴圈語句編寫包含主函數和printf()函數的第一個程式透過實戰案例(如計算平均數)練習C語言知識

開創性CVM演算法破解40多年計數難題!電腦科學家擲硬幣算出「哈姆雷特」獨特單字 開創性CVM演算法破解40多年計數難題!電腦科學家擲硬幣算出「哈姆雷特」獨特單字 Jun 07, 2024 pm 03:44 PM

計數,聽起來簡單,卻在實際執行上很困難。想像一下,你被送到一片原始熱帶雨林,進行野生動物普查。每當看到一隻動物,就拍一張照片。數位相機只是記錄追蹤動物總數,但你對獨特動物的數量感興趣,卻沒有統計。那麼,若想獲取這獨特動物數量,最好的方法是什麼?這時,你一定會說,從現在開始計數,最後再從照片中將每一種新物種與名單進行比較。然而,這種常見的計數方法,有時並不適用於高達數十億條目的資訊量。來自印度統計研究所、UNL、新加坡國立大學的電腦科學家提出了一種新演算法——CVM。它可以近似計算長列表中,不同條

使用 Python 解決問題:作為初學者,解鎖強大的解決方案 使用 Python 解決問題:作為初學者,解鎖強大的解決方案 Oct 11, 2024 pm 08:58 PM

Python 讓初學者能夠解決問題。

C++ 程式設計謎題片段:激發思維,提升程式設計水平 C++ 程式設計謎題片段:激發思維,提升程式設計水平 Jun 01, 2024 pm 10:26 PM

C++程式設計謎題涵蓋斐波那契數列、階乘、漢明距離、陣列最大值和最小值等演算法和資料結構概念,透過解決這些謎題,可以鞏固C++知識,提升演算法理解和程式設計技巧。

See all articles