1.找出所有的水仙花数:

水仙花数例如:153 的特点:

1^3+5^3+3^=153 而且水仙花数只会是三位数,所以可以利用循环的方式来解决问题,循环条件可以设为:

var i = 1;i <=999; i++;因此具体过程如下:

var a, b, c;     作用:接受水仙花数的百,十,个位数

for (var i = 100;i <=999; i++){  

  a = parseInt(i / 100);      i百位上的数
  b = parseInt(((i / 10) % 10));  i十位上的数
  c = i % 10;            i个位上的数

  if (i == a * a * a + b * b * b + c * c * c)   水仙花数的判断条件
  {
    document.write('水仙花数: ' + i + '<br/>');  如果是水仙花数,将其打印出来。
  }
};

2.斐波那契数列:

特点   1 1 2 3 5 8 13…… 即从第三个数开始每个数是前两个数的和所以具体做法如下:

var a = 1;
var b = 1;
var c;
var i=3;
document.write(a + "<br/>");  打印不参与循环的第一个数
document.write(b + "<br/>");  打印不参与循环的第二个数

while (i<=20) {

  c = a + b;           i=1时c=3,此时应如下两部将
  a = b;             第一个数获得第二个数的值,
  b = c;             第二个数获得第三个数的值,此时第四个数仍等于a+b,

  i++;
  document.write(c + "<br/>"); 打印从第三位开始的数
}

同类型的题还有兔子对数问题和1/2  2/3  3/5....的问题。

3.图形题:

[做图形题的思路]
1.确定图形一共有几行,即为外层循环的次数。
2.每行有几种元素,代表有几个内层循环。
3.确定每种元素的个数,即为每个内层循环的次数。
tips:通常找出每种元素个数与行号的关系式,即为当前内层循环的最大值;(从1开始。)

平行四边形
for(var i=1;i<=5;i++){            共5行,每行有空格,星号两种元素,因此i<=5,里面有2个for循环
  

  for(var j=1;j<i;j++){                       用于输出空格的循环,每行的个数等于行数减1,因此循环条件就j<i,循环次数即空格个数
    document.write("&nbsp;");
  }
  for(var k=1;k<=5;k++){       用于输出星号的循环,每行的个数等于5,因此循环条件就k<=5,循环次数即星号个数            
    document.write("*");
  }
  document.write("<br/>");

}
document.write("<br/>");

同时还有菱形等图形。

4.循环综合练习:atm取款

需求描述:假设一个简单的ATM机的取款过程为:
① 首先提示用户输入密码(password),假设默认密码为111111,最多只能输入3次,
② 超过3次则提示用户“密码错误,请取卡”,结束交易。

如果用户密码正确,再提示用户选择金额(amount),
“请输入0到6中任意数字选择对应钱数:0:手动输入金额,1:100元, 2:300元,3:500元, 4:1000元, 5:3000元, 6:5000元”。

输入数字如果错误,提示“输入错误,是否继续 Y/N”,选择Y重新提示输入钱数编号,
选择N提示“输入错误,请取卡!”。选择数字为1到6,打印对应钱数,
并提示“是否继续 Y/N”。选择数字0,ATM机只能输出100元纸币,
自定义钱数要求最低为100元,最高为1000元。如果用户输入的金额符合上述要求,
则打印输出用户取的钱数,并提示“取款完成,是否继续Y/N”;否则输出一句话“金额错误,
是否继续 Y/N”,如果用户输入Y,提示用户重新选择取款金额,如果用户输入 N,
打印“交易取消,请取卡!”

ps:取款成功后,应该提示用户是否继续,总取款金额不能超过2万

【解题思路】
1、验证密码
 ① 密码正确,继续执行下面操作;
 ② 密码错误3次,return;
2、取款操作。全部包含在 while循环内部。
 ① 提示选择编号;
 ② 根据编号,给money赋值。用switch结构实现。
 1~6:直接给money赋固定值,0:手动赋值操作;
 ③ 验证取款是否成功。money-本次取款金额,moneySum-本次取款之前的总金额
 判断moneySum+money是否>20000,3种情况:
 >2000 本次取款超额,但moneySum之前并不足20000,继续下次循环;
 =2000 取完本次money后,刚好满额。money可以加到sum上,然后return;
 <2000 取完本次money后,仍未上限。money可以加到sum上,继续下次循环。
 ④ 验证是否继续,while-if结构实现,有3种情况:
 Y/y 将小循环break,继续执行取款大循环;
 N/n 直接return,停止所有操作;
 其他 continue,继续执行小循环,重复输入Y/N

function func(){
  代码开始

  console.log("***********欢迎使用ATM机取款业务**********");
  验证密码
  var i = 1;
  for(; i <= 3; i++) {
    console.log("请输入密码:");
    var pwd = parseInt(prompt("请输入密码:"));
    if(pwd == 111111) {
      console.log("密码输入正确!");
    break;
    }
  }
  if(i > 3) {
  如果i大于3,表示3次输入密码全部错误。
    console.log("密码错误3次!请取卡!");
    return;
  }
  console.log("************请根据序号进行取款************");
  取款操作
  var moneySum = 0; 取款总金额
  var money = 0; 本次取款金额
  while(true) {
    console.log("0-手动输入金额");
    console.log("1-100元\t\t2-300元\t\t3-500元");
    console.log("4-1000元\t\t5-3000元\t\t6-5000元");
    console.log("请选择:");
    var chooseNum = parseInt(prompt("请选择取款序号0-6:"));
    switch(chooseNum) {
      case 1:
        money = 100;
        break;
      case 2:
        money = 300;
        break;
      case 3:
        money = 500;
        break;
      case 4:
        money = 1000;
        break;
      case 5:
        money = 3000;
        break;
      case 6:
        money = 5000;
        break;
      case 0:
        while(true) {
          console.log("请输入取款金额:");
          money = parseInt(prompt("请输入取款金额:"));
          if(money >= 100 && money <= 1000 && money % 100 == 0) {判断输入的金额是否符合要求,若符合,将跳出死循环,否则一直重输。
            break;
          } else {
            console.log("您输入的金额不合法,");
            continue;
          }
         }
         break;
      default:
        console.log("序号选择错误!");
        break;
  }

  验证总取款金额是否超过20000
  if(moneySum + money < 20000) {
    console.log("取款成功,本次取款" + money + "元,");
    moneySum += money;
    console.log("总取款" + moneySum + "元");
  } else if(moneySum + money == 20000) {
    console.log("取款成功,本次取款" + money + "元,");
    moneySum += money;
    console.log("总取款" + moneySum + "元");
    console.log("今日取款已达上限,情取卡!");
    break;  总取款达到20000元总循环结束
  } else {
    console.log("取款失败!每日取款上限20000元,您已取" +
    moneySum + "元,还可取" + (20000 - moneySum) + "元");
  }

  验证是否继续
  while(true) {
    console.log("是否继续(Y/N):");
    var isGoON = prompt("是否继续(Y/N):");
    if(isGoON == 'y' || isGoON == 'Y') {
      break; 输入Y/y跳出此死循环,从输入取钱序号处开始循环
    } else if(isGoON == 'n' || isGoON == 'N') {
      return;输入N/n跳出函数,程序终止
    } else {
      console.log("输入有误,请选择Y-继续,N-退出,");
    }
   }
  }

console.log("感谢您的使用!");

}

func();调用函数 ,此题结束。

5.函数递归实现1!+2!+3!……+10!=?

var sum=0;
var j=1;
function func(n1){
  var j=1;
  !function(n2){  此函数用于实现n!的乘积,n2=1,j=1*1,n2=2,j=j*2,依次类推。
    j*=n2;
    n2++;
    if(n2<=n1){
      arguments.callee(n2);
    }
  }(1)

  sum+=j;  用于实现1!+2!+3!……+10!的和,n1=1,sum=1!,n1=2,此时sum=sum+2!,依次类推。
  n1++;
  if(n1<=10){
    arguments.callee(n1);
  }
}
func(1);
console.log("和是"+sum);

以上就是我在js学习中遇到的一些比较重要的问题,下周再见。

JS学习中遇到的一些题目的更多相关文章

  1. 关于 knockout js 学习中的疑问 (1)

    最近刚刚学习knockout中遇到如下问题: 1.在给viewModel定义一个方法时,有时后面跟 的this,有的时候没有 如下所示: this.fullName = ko.computed(fun ...

  2. Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

    f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...

  3. JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结

    JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode    父节点 childNodes     ...

  4. JS学习五(js中的事件)

    [JS中的事件分类] 1.鼠标事件 click/bdlclick/onmouseover/onmouseout 2. HTML事件 onload/onscroll/onsubmit/onchange/ ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  7. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  8. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  9. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

随机推荐

  1. 无向图的完美消除序列 判断弦图 ZOJ 1015 Fish net

       ZOJ1015 题意简述:给定一个无向图,判断是否存在一个长度大于3的环路,且其上没有弦(连接环上不同两点的边且不在环上). 命题等价于该图是否存在完美消除序列. 所谓完美消除序列:在 vi,v ...

  2. show_you_my_codes 001

    program 001 第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券), 使用 Python 如何生成 200 个激活码(或者优 ...

  3. 软件测试作业1 — 令我印象最深的BUG

    回顾从大一到大三的学习生活,我在学习过程中遇到过许多BUG,刚开始和罗凯老师学习C++时从来没有接触过编程,那时候导致程序不能运行的原因多是语法错误和拼写错误,到了大一下学期,错误多出现在循环与条件跳 ...

  4. ASP.NET MVC4.0+ WebAPI+EasyUI+KnockOutJS快速开发框架 通用权限管理系统

    1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性高.有利软件 ...

  5. 第八讲:I/O虚拟化

    一.I/O虚拟化的产生 服务器单个千兆以太网端口肯定能够支持单个应用,但是当被分割为10个.15个或者更多的服务器负载时(这其中包括网络.存储以及服务器之间的流量)可能就不够用了. 当遇到I/O瓶颈时 ...

  6. Spring事务管理源码分析

    Spring事务管理方式 依据Spring.xsd文件可以发现,Spring提供了advice,annotation-driven,jta-transaction-manager3种事务管理方式.详情 ...

  7. 《你不知道的JavaScript》整理(五)——值与原生函数

    一.值 1)数字 JavaScript只有一种数值类型:number(数字),包括"整数"和带小数的十进制数. //数字的语法 a.toExponential(); // &quo ...

  8. 1687: [Usaco2005 Open]Navigating the City 城市交通

    1687: [Usaco2005 Open]Navigating the City 城市交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 94  Sol ...

  9. vue学习笔记(一)关于事件冒泡和键盘事件 以及与Angular的区别

    一.事件冒泡 方法一.使用event.cancelBubble = true来组织冒泡 <div @click="show2()"> <input type=&q ...

  10. Permanent Generation Removal Overview(译文)

    英文原稿:http://vdisk.weibo.com/s/vxGdGZEZTEjk 中文整理稿:http://it.deepinmind.com/gc/2014/05/14/metaspace-in ...