一些入门的编程题(JS实现)

1. 在页面上输出100到1000之间既是3的倍数又是5的倍数的数字。
2. 鸡兔同笼:鸡和兔子一共35只,笼子里一共有94只脚,用程序计算出鸡和兔子分别多少只
3. 计算两个数的最大公约数和最小公倍数。
4. 求1!+2!+3!+...+10!的和。
5. 对一个整数分解质因数。例如: 90 = 2 * 3 * 3 * 5
6. 在页面中显示出所有的"水仙花数",所谓"水仙花数"是指一个三位数, 其各位数字立方和等于该数本身。
7. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。 例如6=1+2+3.编程 找出1000以内的所有完数。

1.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>既是3的倍数也是5的倍数</title>
    <style>
        p{
            font:bold 16px  "微软雅黑";
            color:red;
        }
        span{
            display: inline-block;
            width: 50px;

        }
    </style>
</head>
<body>
<script>
    // 题目:在页面上输出100到1000之间既是3的倍数又是5的倍数的数字。
    var min=100;
    var max=1000;
    //count变量作为累加器
    var count=0;
    document.write("<p>"+min+"到"+max+"之间的数既是3的倍数也是5的倍数有:"+"</p>");
    for(i=min;i<=max;i++){
        //判断既是3的倍数又是5的倍数的i
        if(i%3==0 && i%5==0){
            document.write("<span>"+i+"</span>");
            count++;
            if(count%5==0){
                document.write("<br>");
                count=0;
            }
        }
    }
</script>
</body>
</html>


2.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鸡兔同笼</title>
    <style>
        p{
            font:bold 16px "微软雅黑";
            color:red;
        }
    </style>
</head>
<body>
<!--题目:鸡兔同笼:鸡和兔子一共35只,笼子里一共有94只脚,用程序计算出鸡和兔子分别多少只-->
<script>
    //兔子和鸡数量一共有amount
    var amount=35;
    //兔子和鸡脚支有foot
    var foot=94;
    document.write("<p>"+"鸡兔同笼:一共35只,94支脚"+"</p>");
    //i设为是兔子的数量
    for(var i=0;i<=amount;i++){
        if(i*4+(amount-i)*2==foot){
            document.write("满足以上条件有以下方案:"+"兔子数量:"+i+" 鸡的数量:"+(amount-i));
        }
    }

</script>
</body>
</html>


3.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>求两数的最大公约数和最小公倍数</title>
</head>
<body>
<!--题目:计算两个数的最大公约数和最小公倍数-->
<script>
    var num1=+prompt("输入第一个数:");
    var num2=+prompt("输入第二个数:");
    //判断两个数的大小
    //变量:divident放大数,divisor放小数,remainder放余数;
    if(num1>num2){
        divident=num1;
        divisor=num2;
    }else{
        divident=num2;
        divisor=num1;
    }
    //进行计算最大公约数
    //基本思想就是辗转相除法(大数除以小数,小数除以上一步的余数,知道余数为0)
    while(divident%divisor != 0){
        remainder=divident%divisor;
        divident=divisor;
        divisor=remainder;
    }
    //变量:gcd最大公约数;lcm最大公倍数;
    //求出了最大公约数,那么最大公约数基本思想就是:两数的成绩除以最大公约数。
    var gcd=divisor;
    var lcm=num1*num2/gcd;

    //输出页面
    document.write("您输入的两数为:"+num1 +" "+num2+"<br>");
    document.write("两数最大公约数为: "+gcd+"<br>");
    document.write("两数最小公倍数为: "+lcm+"<br>");
</script>
</body>
</html>
3.另解:思想算法简单一点,但算法时间复杂度不够优化
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>简单算法的最大公约数和最小公倍数</title>
</head>
<body>
<script>
    var m=5;
    var n=12;
    var min=m<n ? m:n;
    for(var i=min;i>0;i--){
        if(m%i==0 && n%i==0){
            console.log(m+"与"+n+"的最大公约数:"+i);
            break;
        }
    }

    var max=m>n? m:n;
    for(var i=max;i>1;i++ ){
        if(i%m==0 && i%n==0){
            console.log(m+"与"+n+"的最小公倍数:"+i);
            break;
        }
    }
</script>
</body>
</html>


4.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>阶乘相加</title>
</head>
<body>
<script>
    //题目:求1!+2!+3!+...+10!的和
    var sum=0;
        for(var i=1 ;i<=10;i++){
            //重中之重是mul变量的position
            var mul=1;
            for(var j=1;j<=i;j++){
                mul*=j;
            }
                sum+=mul;
    }
    document.write(sum);
</script>
</body>
</html>


5.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对一个分解因式整数</title>
    <style>
        span,p{
            font:bold 16px "fantasy";
            color:red;
        }
    </style>
</head>
<body>


 <!--* 题目:对一个整数分解质因数。例如: 90 = 2 * 3 * 3 * 5-->
 <!--* 概念分析:分解质因数只针对合数。每个合数都可以写成几个质数相乘的形式。
       程式分析:如果是质数,分解质因数就是其本身。
        这里我对2单独考虑,2既不是属于合数也不是属于质数。所以我对用户输入值要求大于2的数。(用if··else语句实现)
        求一个数分解质因数,要从最小的质数除起(那么就不用prime的函数调用方法)
        设置一个for循环,把他所有质数可能值遍历一遍。这种算法较为高效。
        一直除到结果为质数为止。
  -->

<script>
    var input=+prompt("请输入您需要分解因数的数字:");
    document.write("<span>您输入的数字:</span>"+input+"<p> 计算机分解因式结果为:</p>");
    //textNum变量至关重要,如果没有他,比如5  只会输出5=5;不太好看。所以,设置一个变量testNum,
    //只要看testNum就知道他是否本身就是质数啦
    var testNum=input;
    var n=input;
    if(n<2)
    {
        document.write("Warning!请输入大于2的数!");
    }else {
        document.write(n + "=");

        for (var i = 2; i <= Math.sqrt(n); i++)        //这里时间复杂度为O(根号n),大大降低数量级。
        {

            while (n % i == 0) {
                n = n / i;
                document.write(i + " ");
                if (n != 1) {
                    document.write("*");
                }
            }
        }
        //prime质数出口
        if(n==testNum){
            document.write("1* "+n);
        }
        if (n!=1 && n!=testNum) {
            document.write(n);
        }
    }
</script>
</body>
</html>

5.另解:容易理解点的算法思想,但不优化代码

<script>

//5. 对一个整数分解质因数。例如: 900 = 2 * 2 *
//num只是测试数据
var num = 900;
var temp = num;
var msg = num + " = ";
for (var i = 2; i <= temp; i++){
    if (temp % i == 0){
        if (i == temp){ // 最后一次的时候不要再添加 * 号
            msg += i;
        }else{
            msg += i + " * ";
        }
        temp = temp / i;
        i--;
    }
}
console.log(msg);

</script>

6.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>水仙花</title>
</head>
<body>
<style>
    h3{
        color:red;
    }
</style>
<script>
    //在页面中显示出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
    //此题主要是考察两个知识点
    //求三位数的各个位数字
    //求立方项,用函数写法时间复杂度会降低一个数量级O(n);
    document.write("<h3>三位数的水仙花数有:</h3>");
    function cube(x){
        return x*x*x;
    }
    for(var num=100;num<=999;num++){
        var unit=num%10;
        var decade=parseInt((num%100)/10);
        var hundred=parseInt (num/100);
        var outUnit=cube(unit);
        var outDecade=cube(decade);
        var outHundred=cube(hundred);
        if(outUnit+outDecade+outHundred == num){
            document.write(num+"<br>");
        }
    }

</script>
</body>
</html>


7.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>1000以内的所有完数</title>
    <style>
        h3{
            color: red;
        }
    </style>
</head>
<body>
<!--题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。
          例如6=1+2+3.编程 找出1000以内的所有完数。-->
<script>
    document.write("<h3>1000以内的所有完数:</h3>");
    //count累加器,作为换行计数器
    var count;
    //外层for循环是遍历1--1000数字的作用,变量i就是各个数
    for(var i=1;i<1000;i++){
        //Position of variate is important!!!
        var sum=0;
        //内层for循环是找出其数的所有因子,变量j就是各个因子
        for(var j=1;j<i;j++){
            if(i%j==0){
                sum+=j;
            }
        }
        //判断因子和是否等于其本身number值,若是则是完数并输出。
        if(sum==i){
            document.write(i+" &nbsp;");
            //以下代码是用来5个换行,但没用到,因为1000内数只有三个是完数。
            count++;
            if(count%5 == 0){
                document.write("<br>");
                count=0;
            }
        }

    }
</script>
</body>
</html>
 

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值