整理下w3cschool上,编程挑战的算法

翻转字符串

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

你的结果必须得是一个字符串

 1 /*function reverseString(str) {
 2   var arr=str.split("");
 3   arr.reverse();
 4   str=arr.join("");
 5 return str;
 6 }*/
 7
 8 function reverseString(str){
 9   var chars=new Array(100);//顺序栈
10   var top=-1;//顶指针
11   for(i=0;i<str.length;i++){
12     chars[i]=str.charAt(i);//存数据
13     top++;
14   }
15   str="";//清空字符串
16   for(top;top>=0;top--){
17     str+=chars[top];//取数据
18   }
19   return str;
20 }
21
22 reverseString("hello");

计算一个整数的阶乘

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

阶乘通常简写成 n!

例如: 5! = 1 * 2 * 3 * 4 * 5 = 120

 1 function factorialize(num) {
 2   var temp=1;
 3   for (var i=1;i<=num;i++){
 4     temp*=i;
 5   }
 6   num=temp;
 7 return num;
 8 }
 9
10 factorialize(5);

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

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

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

函数参数的值可以为"racecar""RaceCar""race CAR"

 1 function palindrome(str) {
 2 // Good luck!
 3 //字符串倒排序
 4
 5   //转换成小写字符串,同一大小写
 6   //正则表达式不懂
 7   var str1=str.toLowerCase();
 8   str1=str1.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\‘|\,|\<|\.|\>|\/|\?]/g,"");
 9   //分割成数组
10   var arr=str1.split("");
11
12   //数组倒排序
13   arr.reverse();
14   //转换字符串
15   var str2=arr.join("");
16
17 //条件语句
18   /*if(str1==str2){
19 return true;}
20   else{return false;}*/
21   return(str1==str2);
22 }
23
24
25
26 palindrome("eye");

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

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

 1 function findLongestWord(str) {
 2 var arr=str.split(" ");
 3 var temp=0;
 4   for(i=0;i<arr.length;i++){
 5   var str1=arr[i];
 6   temp=temp>str1.length?temp:str1.length;
 7 }
 8   return temp;
 9 }
10
11 findLongestWord("The quick brown fox jumped over the lazy dog");

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

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

 1 function titleCase(str) {
 2 var arr=str.split(" ");
 3 var str1="";
 4   //遍历数组
 5 for(i=0;i<arr.length;i++){
 6   //把每段字符串第一个字母大写
 7     var strTemp=arr[i];
 8     var strTiQu1=strTemp.slice(0,1);
 9     strTiQu1=strTiQu1.toUpperCase();
10     var strTiQu2=strTemp.slice(1);
11     strTiQu2=strTiQu2.toLowerCase();
12     arr[i]=strTiQu1+strTiQu2;
13 }
14  for(i=0;i<arr.length-1;i++){
15    str1+=arr[i]+" ";
16  }
17   var i=arr.length;
18   str1+=arr[i-1];
19   return str1;
20 }
21
22 titleCase("I‘m a little tea pot");

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

提示:你可以用for循环来迭代数组,并通过arr[i]的方式来访问数组的每个元素。

 1 function largestOfFour(arr) {
 2 // You can do this!
 3   for(var i=0;i<arr.length;i++){
 4     arr[i]=maxOfArr(arr[i]);
 5   }
 6 return arr;
 7 }
 8 //计算单个数组最大值
 9 function maxOfArr(arr) {
10   var max=arr[0];
11   for(var i=1;i<arr.length;i++){
12     max=max>arr[i]?max:arr[i];
13   }
14   return max;
15 }
16
17 largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

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

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

 1 function confirmEnding(str, target) {
 2 // "Never give up and good luck will find you."
 3 // -- Falcor
 4   //声明两个数组用于存储
 5   var arr1=[],arr2=[];
 6   //用for循环存储字符
 7   var i;
 8   for(i=0;i<str.length;i++){
 9     arr1[i]=str[i];
10   }
11   for(i=0;i<target.length;i++){
12     arr2[i]=target[i];
13   }
14   //采用while循环倒序比较
15   var j=arr1.length-1;
16   i=arr2.length-1;
17   while(i>=0){
18     if(arr2[i]==arr1[j]){
19       i--;
20       j--;
21     }
22     else{
23       str=false;
24       break;
25     }
26     str=true;
27   }
28
29 return str;
30 }
31
32 confirmEnding("Bastian", "n");

重要的事情说3遍!

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

 1 function repeat(str, num) {
 2 // repeat after me
 3   if(num<=0){
 4     str="";
 5   }
 6   else{
 7     var newstr="";
 8     for(i=0;i<num;i++){
 9       newstr+= str;
10     }
11     str=newstr;
12   }
13
14 return str;
15 }
16
17 repeat("abc", 3);

截断一个字符串!

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

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

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

 1 function truncate(str, num) {
 2 // Clear out that junk in your trunk
 3   var arr=[];
 4   for(var i=0;i<str.length;i++){
 5     arr[i]=str[i];
 6   }
 7   //字符串的长度比指定的参数num短
 8   //直接输出
 9   if(str.length<=num){
10     return str;
11   }
12   //否则以下代码
13   var last="...";
14   str="";
15   if(num<=3){
16     for(j=0;j<num;j++){
17       str+=arr[j];
18     }
19     str+=last;
20     console.log(str);
21   }
22   else{
23     for(j=0;j<num-last.length;j++){
24       str+=arr[j];
25     }
26     str+=last;
27     console.log(str);
28   }
29
30
31 return str;
32 }
33
34 truncate("A-tisket a-tasket A green and yellow basket", 11);
时间: 2024-08-28 00:47:24

整理下w3cschool上,编程挑战的算法的相关文章

编程挑战系统的输入和输出详细说明

在高校俱乐部线上编程挑战中,一道题目的所有测试数据是放在一个文本文件中,选手将一道题目的程序提交给评判系统运行,程序从该文件中读取测试数据,再把运行结果输出到另一个文本文件中.系统把输出文件与标准答案比对,来评判程序编写得正确与否. 本系统采用标准的输入输出,输入结束有文件末尾标识(EOF),这可以用于确定输入结束. 一.四种基本输入形式 1.      一组输入数据 示例:整数求和 描述 给定两个整数,求它们之和. 输入 两个整数A,B. 输出 两个整数的和. 样例输入 1 2 样例输出 3

编程挑战--下拉菜单

最近有一个叫慕客网的学习平台,现在很火.课程后面一般都会留有一道小题目,用来检测小伙伴们的学习结果.我看到有一个课程还不错,后面也跟了很多回复,不过感觉代码质量都不高,这可能和课程定位有关,如果你有信心写的更好,不妨来挑战一下.有兴趣的同学可以参考下面的链接: 课程地址:http://www.imooc.com/code/3631 我把题目要求再贴一下: 编程挑战 小伙伴们,根据所学知识,实现下图所示的菜单效果,实现点击菜单中的向下三角展开菜单,点击页面空白处收起菜单,按下键盘上的向上.向下方向

Windows环境下用C#编程将文件上传至阿里云OSS笔记

本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/24962567 作者:张建波 邮箱: [email protected]  欢迎来信交流! 第1步: 下载阿里云OSS的SDK包,由于笔者的环境是PHP服务,所以下载的是PHP的SDK包 http://help.aliyun.com/view/13438816.html 第2步:将代码整合进你的网站或服务中. 第3步:配置OSS访问接口 (1)找到c

CSDN挑战编程——《金色十月线上编程比赛第一题:小女孩数数》

金色十月线上编程比赛第一题:小女孩数数 题目详情: [金色十月线上编程比赛规则] 一个小女孩正在用左手手指数数,从1数到n.她从拇指算作1开始数起,然后,食指为2,中指为3,无名指为4,小指为5.接下来调转方向,无名指算作6,中指为7,食指为8,大拇指为9,如此反复.问最后会停在那个手指上?用编号1.2.3.4.5依次表示大拇指.食指.中指.无名指.小指. 输入格式: 输入多组数据.每组数据占一行,只包含一个整数n(1<=n<=1000000000). 输出格式: 每组数据占一行,只包含一个介

CSDN挑战编程——《金色十月线上编程比赛第二题:解密》

金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同时他也是一个黑客. 考试结束后不久,他惊讶的发现自己的高等数学科目居然挂了,于是他果断入侵了学校教务部网站.在入侵的过程中,他发现了与成绩相关的内容是一个加密文件,这个文件由 n 个数构成,经过分析,这个加密文件的密钥为这 n 个数中二进制位数 1 最少的数.但由于数比较多,小强 希望你能帮他得到密钥,好在成绩公布之前将成绩改过来. 输入描述: 输入由多组数据构成,每组数据第一行为一个数 n(1<=n<=10^5),表示数的数量

在Windows下进行的编程人员,你真的需要学习下Linux

从业几年,发现好多编程人员,严重依赖UI工具.对一些命令操作,十分的反感.尤其是从事Windows系统中的程序开发的人员.由于微软对开发工具,编程套件的极限优化.开发出更多的 面向UI的开发工具.从VB6.0 到VC6.0的经典MFC编程.越来越多的Windows开发人员,包括后来的从业者,越发的不能理解那种古老的在命令行下进行代码编程的方式和思维. 从.Net诞生后,微软开发的新一代IDE工具,Visual Studio,越来越华丽,功能越来越强大.所有的操作都是面向UI.不需要进行命令的控制

编程思想与算法

常用编程思想与算法 本文是在阅读Aditya Bhargava先生算法图解一书所做的总结,文中部分代码引用了原文的代码,在此感谢Aditya Bhargava先生所作出的这么简单的事例,对基础算法感兴趣的朋友可以阅读原文.由于本人也是编程初学者,所以本书比较浅显易懂,所介绍的算法配上插图也十分易懂,这里只是介绍几种最基础的算法由浅入深以帮助理顺一些简单的思维逻辑. 算法简介 算法是一组完成任务的指令.任何代码片段都可视为算法,我们这里讨论的算法要么速度快,要么能解决有趣的问题,要么兼而有之. 二

linux 操作系统下c语言编程入门

2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门--线程操作 8)Linux程序设计入门--网络编程 9)Linux下C开发工具介绍 1)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编

深入Delphi下的DLL编程

深入Delphi下的DLL编程 作者:岑心 引 言 相信有些计算机知识的朋友都应该听说过“DLL”.尤其是那些使用过windows操作系统的人,都应该有过多次重装系统的“悲惨”经历——无论再怎样小心,没有驱动损坏,没有病毒侵扰,仍然在使用(安装)了一段时间软件后,发现windows系统越来越庞大,操作越来越慢,还不时的出现曾经能使用的软件无法使用的情况,导致最终不得不重装系统.这种情况常常是由于dll文件的大量安装和冲突造成的.这一方面说明DLL的不足,另一方面也说明DLL的重要地位,以至我们无