• JS学习中遇到的一些题目


    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学习中遇到的一些比较重要的问题,下周再见。

  • 相关阅读:
    chapter23:软件安装RPM,SRPM与YUM之(0)-软件管理器的简介
    chapter22:源码与Tarball之(3)-函数库的管理
    chapter22:源码与Tarball之(2)-Tarball的管理与安装
    Akamai在内容分发网络中的算法研究(翻译总结)
    常用机器性能评估工具
    利用神经网络编辑图片的调研
    Redis命令总结及其基础知识讲述
    MySQL主从复制与主主复制
    MySQL查询优化
    降低Redis内存占用
  • 原文地址:https://www.cnblogs.com/wujianrui/p/6686511.html
Copyright © 2020-2023  润新知